{
  "$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?"
}