Revisit nullability annotations

This commit introduces the following changes.

1) It adds a new Spring @NonNull annotation which allows to apply
@NonNullApi semantic on a specific element, like @Nullable does.
Combined with @Nullable, it allows partial null-safety support when
package granularity is too broad.

2) @Nullable and @NonNull can apply to ElementType.TYPE_USE in order
to be used on generic type arguments (SPR-15942).

3) Annotations does not apply to ElementType.TYPE_PARAMETER anymore
since it is not supported yet (applicability for such use case is
controversial and need to be discussed).

4) @NonNullApi does not apply to ElementType.FIELD anymore since in a
lot of use cases (private, protected) it is not part for the public API
+ its usage should remain opt-in. A dedicated @NonNullFields annotation
has been added in order to set fields default to non-nullable.

5) Updated Javadoc and reference documentation.

Issue: SPR-15756
This commit is contained in:
Sebastien Deleuze
2017-09-15 13:26:41 +02:00
parent ec2218c967
commit 1bc93e3d0f
364 changed files with 1003 additions and 113 deletions

View File

@@ -2,6 +2,8 @@
* Common utility classes behind the <em>Spring Expression Language</em>.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression.common;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Core abstractions behind the <em>Spring Expression Language</em>.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* SpEL's abstract syntax tree.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression.spel.ast;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* SpEL's central implementation package.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression.spel;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* SpEL's standard parser implementation.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression.spel.standard;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* SpEL's default implementations for various core abstractions.
*/
@NonNullApi
@NonNullFields
package org.springframework.expression.spel.support;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;