Why @Nonnull annotation checked at runtime?
I have a function with following signature
public static String myFunction(@Nonnull String param)
When I call it with param as null, I get the following exception:
Caused by: java.lang.IllegalArgumentException: Argument for @Nonnull parameter 'param' of com/MyClass.myFunction must not be null
at com.MyClass.$$$reportNull$$$0(MyClass.java)
javax.annotation.Nonnull supposed not to be checked at runtime.
Who actually throws the exception and why?
P.S. I run Tomcat server in debug mode from IntelliJ IDEA 2016.3 with Oracle JDK 1.8.0_102
Solution 1:
When you compile your project in IntelliJ IDEA, it instruments the bytecode of compiled classes to add runtime checks for various flavors of @Nonnull
annotations. This behavior is controlled by the option:
Settings | Build, Execution, Deployment | Compiler | [x] Add runtime assertions for not-null-annotated methods and parameters.