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

@@ -4,6 +4,8 @@
* given request.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.accept;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Spring WebFlux configuration infrastructure.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.config;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -4,6 +4,8 @@
* {@code org.springframework.http.client.reactive} reactive HTTP adapter layer.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.function.client;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Provides a foundation for both the reactive client and server subpackages.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.function;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Provides the types that make up Spring's functional web framework.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.function.server;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -5,6 +5,8 @@
* a {@code ServerRequest} wrapper to adapt a request.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.function.server.support;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Provides HandlerMapping implementations including abstract base classes.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.handler;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -10,6 +10,8 @@
* {@code WebClient} as well as client and server, reactive WebSocket support.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Support classes for serving static resources.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.resource;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Infrastructure for annotation-based handler method processing.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result.method.annotation;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Infrastructure for handler method processing.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result.method;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -5,6 +5,8 @@
* resolution, and so on.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -5,6 +5,8 @@
* Contains a View implementation for FreeMarker templates.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result.view.freemarker;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Support for result handling through view resolution.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result.view;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -4,6 +4,8 @@
* Contains a View implementation for scripted templates.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.result.view.script;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Classes adapting Spring's Reactive WebSocket API to and from WebSocket runtimes.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket.adapter;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Client support for WebSocket interactions.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket.client;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Abstractions and support classes for reactive WebSocket interactions.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Server support for WebSocket interactions.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket.server;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Server-side support classes for WebSocket requests.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket.server.support;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -3,6 +3,8 @@
* {@link org.springframework.web.reactive.socket.server.RequestUpgradeStrategy}.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.socket.server.upgrade;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

View File

@@ -2,6 +2,8 @@
* Support classes for Spring WebFlux setup.
*/
@NonNullApi
@NonNullFields
package org.springframework.web.reactive.support;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;