Through fast bytecode analysis and bytecode generation Exceptional injects the necessary null checks with the informative text. All this happens after the compiler did its work

Exceptional can be used from Java 5 on and up!

Exceptional adds no new dependencies to your applications.

No, the Kotlin language and compiler already address null pointer issues.

Kotlin classes get skipped by Exceptional.

No, the code analysis and generation does not rely on the use of annotations or other meta-data.

No it is not. Both the messages and the way NullPointerException’s get intercepted are different.

Exceptional does not produce exactly the same messages as JEP358. And where as JEP358 is implemented by runtime (i.e. the JVM), Exceptional add instructions to the bytecode (as does Kotlin for instance).

You still can, especially if you target to run on versions lower than Java 14.

However if you compile for Java 14 or higher there is no real added value since the runtime will provide similar information.

Exceptional is compile time tool. No Java agent or other load time weaving. You can view it as special purpose compiler. It runs after the Java compiler to enhance the bytecode in the .class files.

No it won’t. Exceptional only works on the code you compile and enhance. There is no runtime component that could intercept problems occurring in other code.

No, the Groovy runtime itself intercepts null pointer problems to provide more information.

Groovy classes, scripts and closures get skipped by Exceptional.

No, Exceptional works directly on the bytecode produced by the Java compiler of your choice. No source code needed.