{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiaabskgxmjbaiqxnyvmwcnvyhbropm3wqula6pvhd26j3pakrpkoi",
"uri": "at://did:plc:4n6wgsqsqm6q2hjncgwmreey/app.bsky.feed.post/3miix4gwu6ao2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreidlrlmjkjpwptzfwtgtnu7k6mu2q5nrsdydutafkeowrv6hbsskd4"
},
"mimeType": "image/png",
"size": 25875
},
"path": "/post/48126071",
"publishedAt": "2026-04-01T15:26:17.000Z",
"site": "https://programming.dev",
"tags": [
"Programming",
"justicecoder",
"1 comments",
"https://github.com/nieuwmijnleven/JADEx",
"JADEx",
"https://github.com/nieuwmijnleven/JADEx/blob/master/SpringBootExample.md",
"https://github.com/nieuwmijnleven/jadex-springboot-example",
"@Data",
"@Builder",
"@Entity",
"@Nullable"
],
"textContent": "submitted by justicecoder to programming\n3 points | 1 comments\nhttps://github.com/nieuwmijnleven/JADEx\n\nI’ve been working on **JADEx** (Java Advanced Development Extension) which is a safety layer that makes Java safer by adding `Null-Safety` and `Final-by-Default` semantics without rewriting Java codes and modifying the JVM.\n\nQuick recap of what JADEx adds to Java:\n\n * `String?` nullable type declaration\n * `?.` null-safe access operator\n * `?:` Elvis operator\n * `apply readonly` final-by-default mode per file\n\n\n\nToday I’m sharing three things that just landed.\n\n* * *\n\n**1. Lombok support**\n\nThis was the most requested thing. JADEx now integrates with Lombok via a Delombok pipeline internally. The key motivation: JADEx’s nullability checker needs to see Lombok-generated code (getters, builders, constructors) to avoid blind spots. Without Delombok, nullable fields could silently pass through generated methods unchecked.\n\n\n @Data\n @Builder\n @Entity\n public class User {\n private String name;\n private String? email; // @Nullable propagated to getter + builder param\n private Address? address; // @Nullable propagated to getter + builder param\n }\n\n\nAfter Delombok, JADEx sees and analyzes the generated code:\n\n\n // Lombok-generated — JADEx propagates @Nullable into these\n @Nullable\n public String getEmail() { return this.email; }\n\n public UserBuilder email(@Nullable final String email) { ... }\n public UserBuilder address(@Nullable final Address address) { ... }\n\n\n* * *\n\n**2. Gradle plugin published**\n\nThe JADEx Gradle plugin is now on Maven Central and the Gradle Plugin Portal.\n\n\n plugins {\n id 'io.github.nieuwmijnleven.jadex' version '0.628'\n }\n\n jadex {\n sourceDir = 'src/main/jadex'\n }\n\n\nThat’s the only change needed to an existing Spring Boot project. Everything else (compilation, Delombok pipeline, `.java` generation) is handled automatically.\n\n* * *\n\n**3. JADEx Spring Boot example project**\n\n * full description\n\n * https://github.com/nieuwmijnleven/JADEx/blob/master/SpringBootExample.md\n * source repository\n\n * https://github.com/nieuwmijnleven/jadex-springboot-example\n\n\n\n* * *\n\nWe highly welcome your feedback on JADEx.\n\nThank you.",
"title": "What if Java had Kotlin-style null-safety without migrating your Spring Boot project to Kotlin?"
}