Skip to content

Commit 1bc93e3

Browse files
committed
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
1 parent ec2218c commit 1bc93e3

File tree

364 files changed

+1003
-113
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

364 files changed

+1003
-113
lines changed

spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* <p>Normally to be used through an AspectJAutoProxyCreator rather than directly.
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.aop.aspectj.annotation;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/aspectj/autoproxy/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Support for AspectJ annotation aspects resides in the "aspectj.annotation" package.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.aop.aspectj.autoproxy;
78

8-
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/aspectj/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
* functionality, with consistent semantics, with the proxy-based Spring AOP framework.
1010
*/
1111
@NonNullApi
12+
@NonNullFields
1213
package org.springframework.aop.aspectj;
1314

14-
import org.springframework.lang.NonNullApi;
15+
import org.springframework.lang.NonNullApi;
16+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/config/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* with XML schema being the primary configuration format.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.aop.config;
78

8-
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/framework/adapter/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* <p>These adapters do not depend on any other Spring framework classes to allow such usage.
1111
*/
1212
@NonNullApi
13+
@NonNullFields
1314
package org.springframework.aop.framework.adapter;
1415

15-
import org.springframework.lang.NonNullApi;
16+
import org.springframework.lang.NonNullApi;
17+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* Post-processors can be explicitly registered on a ConfigurableBeanFactory instead.
1111
*/
1212
@NonNullApi
13+
@NonNullFields
1314
package org.springframework.aop.framework.autoproxy;
1415

15-
import org.springframework.lang.NonNullApi;
16+
import org.springframework.lang.NonNullApi;
17+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/framework/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
* ProxyFactory class.
1414
*/
1515
@NonNullApi
16+
@NonNullFields
1617
package org.springframework.aop.framework;
1718

18-
import org.springframework.lang.NonNullApi;
19+
import org.springframework.lang.NonNullApi;
20+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/interceptor/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* functionality packages, like "transaction" and "orm".
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.aop.interceptor;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* integrated with the Spring IoC container.
1919
*/
2020
@NonNullApi
21+
@NonNullFields
2122
package org.springframework.aop;
2223

23-
import org.springframework.lang.NonNullApi;
24+
import org.springframework.lang.NonNullApi;
25+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/scope/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Support for AOP-based scoping of target objects, with configurable backend.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.aop.scope;
67

7-
import org.springframework.lang.NonNullApi;
8+
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/support/annotation/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Annotation support for AOP pointcuts.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.aop.support.annotation;
67

7-
import org.springframework.lang.NonNullApi;
8+
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-aop/src/main/java/org/springframework/aop/support/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Convenience classes for using Spring's AOP API.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.aop.support;
67

7-
import org.springframework.lang.NonNullApi;
8+
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/annotation/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Support package for beans-style handling of Java 5 annotations.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.beans.annotation;
67

78
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/annotation/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Support package for annotation-driven bean configuration.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.beans.factory.annotation;
67

78
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/config/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* SPI interfaces and configuration-related convenience classes for bean factories.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.beans.factory.config;
67

78
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* by Rod Johnson (Wrox, 2002).
1111
*/
1212
@NonNullApi
13+
@NonNullFields
1314
package org.springframework.beans.factory;
1415

1516
import org.springframework.lang.NonNullApi;
17+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/parsing/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Support infrastructure for bean definition parsing.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.beans.factory.parsing;
67

78
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/serviceloader/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* Support package for the Java 6 ServiceLoader facility.
33
*/
44
@NonNullApi
5+
@NonNullFields
56
package org.springframework.beans.factory.serviceloader;
67

78
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/support/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Contains abstract base classes for {@code BeanFactory} implementations.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.beans.factory.support;
78

89
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/wiring/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Foundation for aspect-driven bean configuration.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.beans.factory.wiring;
78

89
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/factory/xml/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* including a standard "spring-beans" XSD.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.beans.factory.xml;
78

89
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* by Rod Johnson (Wrox, 2002).
1111
*/
1212
@NonNullApi
13+
@NonNullFields
1314
package org.springframework.beans;
1415

1516
import org.springframework.lang.NonNullApi;
17+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/propertyeditors/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
* specific binding processes, as they are localized or the like.
88
*/
99
@NonNullApi
10+
@NonNullFields
1011
package org.springframework.beans.propertyeditors;
1112

1213
import org.springframework.lang.NonNullApi;
14+
import org.springframework.lang.NonNullFields;

spring-beans/src/main/java/org/springframework/beans/support/package-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* such as utility classes for sorting and holding lists of beans.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.beans.support;
78

89
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/cache/caffeine/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* allowing to set up Caffeine caches within Spring's cache abstraction.
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.cache.caffeine;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* Spring's support in {@code org.springframework.cache.jcache}.
1111
*/
1212
@NonNullApi
13+
@NonNullFields
1314
package org.springframework.cache.ehcache;
1415

15-
import org.springframework.lang.NonNullApi;
16+
import org.springframework.lang.NonNullApi;
17+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/cache/jcache/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* use in a Spring context, using a JSR-107 compliant cache provider.
66
*/
77
@NonNullApi
8+
@NonNullFields
89
package org.springframework.cache.jcache;
910

10-
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullApi;
12+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/cache/transaction/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Provides synchronization of put operations with Spring-managed transactions.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.cache.transaction;
78

8-
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/mail/javamail/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* class for convenient population of a JavaMail MimeMessage.
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.mail.javamail;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/mail/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Concrete implementations are provided in the subpackages.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.mail;
78

8-
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* facility, as supported by IBM WebSphere 6.0+ and BEA WebLogic 9.0+.
44
*/
55
@NonNullApi
6+
@NonNullFields
67
package org.springframework.scheduling.commonj;
78

8-
import org.springframework.lang.NonNullApi;
9+
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/scheduling/quartz/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* convenience classes for implementing Quartz Jobs.
77
*/
88
@NonNullApi
9+
@NonNullFields
910
package org.springframework.scheduling.quartz;
1011

11-
import org.springframework.lang.NonNullApi;
12+
import org.springframework.lang.NonNullApi;
13+
import org.springframework.lang.NonNullFields;

spring-context-support/src/main/java/org/springframework/ui/freemarker/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* within a Spring application context.
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.ui.freemarker;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-context/src/main/java/org/springframework/cache/annotation/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* {@link org.springframework.cache.interceptor.CacheOperationSource}.
55
*/
66
@NonNullApi
7+
@NonNullFields
78
package org.springframework.cache.annotation;
89

9-
import org.springframework.lang.NonNullApi;
10+
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullFields;

spring-context/src/main/java/org/springframework/cache/concurrent/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* use in a Spring context, using a JDK based thread pool at runtime.
66
*/
77
@NonNullApi
8+
@NonNullFields
89
package org.springframework.cache.concurrent;
910

10-
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullApi;
12+
import org.springframework.lang.NonNullFields;

spring-context/src/main/java/org/springframework/cache/config/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* for details on code-based configuration without XML.
66
*/
77
@NonNullApi
8+
@NonNullFields
89
package org.springframework.cache.config;
910

10-
import org.springframework.lang.NonNullApi;
11+
import org.springframework.lang.NonNullApi;
12+
import org.springframework.lang.NonNullFields;

0 commit comments

Comments
 (0)