From 99e54fec3ac8dfedd2537fde5f19fbcc4f1f6202 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 10 Mar 2023 16:03:44 +0100 Subject: [PATCH] Ensure all packages declare package-info.java with null-safety annotations This commit picks up where the two previous commits left off. Specifically, this commit: - Removes the "severity=warning" configuration to ensure that violations actually fail the build. - Fixes regular expressions for suppressions by matching forward slashes using `[\\/]` instead of `\/`. - Moves the configuration for newly introduced checks to locations in checkstyle.xml that align with the existing organization of that file. - Renames the IDs for RegexpSinglelineJava checks from javaDocPackageNonNullApiAnnotation/javaDocPackageNonNullFieldsAnnotation to packageLevelNonNullApiAnnotation/packageLevelNonNullFieldsAnnotation, respectively, since these checks are not related to Javadoc. - Simplifies the null-safety annotation checks to match against imported annotation types, which enforces consistency across package-info.java files for the annotation declarations. - Simplifies the RegEx for JavadocPackage suppressions to only exclude packages not under src/main/java (vs src/main) and those in the framework-docs module. - Consistently suppresses all checks for the `asm`, `cglib`, `objenesis`, and `javapoet` packages in spring-core. - Adds explicit suppressions for null-safety annotations for the `lang` package in spring-core. - Adds explicit suppressions for null-safety annotations for the `org.aopalliance` package in spring-aop. - Revises the RegEx for null-safety annotation suppressions to only exclude package-info.java files not under src/main/java and additionally to exclude package-info.java files in the framework-docs module as well as those in the spring-context-indexer, spring-instrument, and spring-jcl modules. - Adds all missing package-info.java files. - Adds null-safety annotations to package-info.java files where appropriate. Closes gh-30069 --- .../aop/target/dynamic/package-info.java | 10 ++++ .../aop/target/package-info.java | 10 ++++ .../beans/factory/aspectj/package-info.java | 9 ++++ .../cache/aspectj/package-info.java | 9 ++++ .../annotation/aspectj/package-info.java | 11 +++++ .../scheduling/aspectj/package-info.java | 9 ++++ .../transaction/aspectj/package-info.java | 9 ++++ .../beans/factory/groovy/package-info.java | 5 ++ .../context/index/processor/package-info.java | 4 ++ .../instrument/package-info.java | 4 ++ .../support/incrementer/package-info.java | 5 ++ .../r2dbc/connection/init/package-info.java | 7 ++- .../r2dbc/core/package-info.java | 7 ++- .../event/annotation/package-info.java | 5 ++ .../test/context/event/package-info.java | 5 ++ .../springframework/test/package-info.java | 6 --- .../test/web/package-info.java | 5 ++ .../http/codec/cbor/package-info.java | 9 ++++ .../context/request/async/package-info.java | 5 ++ .../result/condition/package-info.java | 5 ++ src/checkstyle/checkstyle-suppressions.xml | 30 ++++++------ src/checkstyle/checkstyle.xml | 46 +++++++++---------- 22 files changed, 165 insertions(+), 50 deletions(-) create mode 100644 spring-aop/src/main/java/org/springframework/aop/target/dynamic/package-info.java create mode 100644 spring-aop/src/main/java/org/springframework/aop/target/package-info.java create mode 100644 spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/package-info.java create mode 100644 spring-aspects/src/main/java/org/springframework/cache/aspectj/package-info.java create mode 100644 spring-aspects/src/main/java/org/springframework/context/annotation/aspectj/package-info.java create mode 100644 spring-aspects/src/main/java/org/springframework/scheduling/aspectj/package-info.java create mode 100644 spring-aspects/src/main/java/org/springframework/transaction/aspectj/package-info.java create mode 100644 spring-context-indexer/src/main/java/org/springframework/context/index/processor/package-info.java create mode 100644 spring-instrument/src/main/java/org/springframework/instrument/package-info.java delete mode 100644 spring-test/src/main/java/org/springframework/test/package-info.java create mode 100644 spring-web/src/main/java/org/springframework/http/codec/cbor/package-info.java diff --git a/spring-aop/src/main/java/org/springframework/aop/target/dynamic/package-info.java b/spring-aop/src/main/java/org/springframework/aop/target/dynamic/package-info.java new file mode 100644 index 0000000000..5ac4c66c18 --- /dev/null +++ b/spring-aop/src/main/java/org/springframework/aop/target/dynamic/package-info.java @@ -0,0 +1,10 @@ +/** + * Support for dynamic, refreshable {@link org.springframework.aop.TargetSource} + * implementations for use with Spring AOP. + */ +@NonNullApi +@NonNullFields +package org.springframework.aop.target.dynamic; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aop/src/main/java/org/springframework/aop/target/package-info.java b/spring-aop/src/main/java/org/springframework/aop/target/package-info.java new file mode 100644 index 0000000000..292cdcce5d --- /dev/null +++ b/spring-aop/src/main/java/org/springframework/aop/target/package-info.java @@ -0,0 +1,10 @@ +/** + * Various {@link org.springframework.aop.TargetSource} implementations for use + * with Spring AOP. + */ +@NonNullApi +@NonNullFields +package org.springframework.aop.target; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/package-info.java b/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/package-info.java new file mode 100644 index 0000000000..675ca10d68 --- /dev/null +++ b/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/package-info.java @@ -0,0 +1,9 @@ +/** + * AspectJ-based dependency injection support. + */ +@NonNullApi +@NonNullFields +package org.springframework.beans.factory.aspectj; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aspects/src/main/java/org/springframework/cache/aspectj/package-info.java b/spring-aspects/src/main/java/org/springframework/cache/aspectj/package-info.java new file mode 100644 index 0000000000..36080e068d --- /dev/null +++ b/spring-aspects/src/main/java/org/springframework/cache/aspectj/package-info.java @@ -0,0 +1,9 @@ +/** + * AspectJ-based caching support. + */ +@NonNullApi +@NonNullFields +package org.springframework.cache.aspectj; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aspects/src/main/java/org/springframework/context/annotation/aspectj/package-info.java b/spring-aspects/src/main/java/org/springframework/context/annotation/aspectj/package-info.java new file mode 100644 index 0000000000..4554b676e4 --- /dev/null +++ b/spring-aspects/src/main/java/org/springframework/context/annotation/aspectj/package-info.java @@ -0,0 +1,11 @@ +/** + * AspectJ-based dependency injection support driven by the + * {@link org.springframework.beans.factory.annotation.Configurable @Configurable} + * annotation. + */ +@NonNullApi +@NonNullFields +package org.springframework.context.annotation.aspectj; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/package-info.java b/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/package-info.java new file mode 100644 index 0000000000..5543ab52fa --- /dev/null +++ b/spring-aspects/src/main/java/org/springframework/scheduling/aspectj/package-info.java @@ -0,0 +1,9 @@ +/** + * AspectJ-based scheduling support. + */ +@NonNullApi +@NonNullFields +package org.springframework.scheduling.aspectj; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/package-info.java b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/package-info.java new file mode 100644 index 0000000000..8b4c08397d --- /dev/null +++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/package-info.java @@ -0,0 +1,9 @@ +/** + * AspectJ-based transaction management support. + */ +@NonNullApi +@NonNullFields +package org.springframework.transaction.aspectj; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/package-info.java b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/package-info.java index d956cd548b..9201a52782 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/package-info.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/package-info.java @@ -1,4 +1,9 @@ /** * Support package for Groovy-based bean definitions. */ +@NonNullApi +@NonNullFields package org.springframework.beans.factory.groovy; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-context-indexer/src/main/java/org/springframework/context/index/processor/package-info.java b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/package-info.java new file mode 100644 index 0000000000..5aaefe754c --- /dev/null +++ b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/package-info.java @@ -0,0 +1,4 @@ +/** + * Core package for Spring Framework's scanned component index. + */ +package org.springframework.context.index.processor; diff --git a/spring-instrument/src/main/java/org/springframework/instrument/package-info.java b/spring-instrument/src/main/java/org/springframework/instrument/package-info.java new file mode 100644 index 0000000000..c6a374ae63 --- /dev/null +++ b/spring-instrument/src/main/java/org/springframework/instrument/package-info.java @@ -0,0 +1,4 @@ +/** + * Core package for byte code instrumentation. + */ +package org.springframework.instrument; diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/package-info.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/package-info.java index 93364ca207..dab17298db 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/package-info.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/package-info.java @@ -4,4 +4,9 @@ * *

Can be used independently, for example in custom JDBC access code. */ +@NonNullApi +@NonNullFields package org.springframework.jdbc.support.incrementer; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/package-info.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/package-info.java index 3153ea5232..e28bcfa442 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/package-info.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/package-info.java @@ -1,6 +1,9 @@ /** * Provides extensible support for initializing databases through scripts. */ -@org.springframework.lang.NonNullApi -@org.springframework.lang.NonNullFields +@NonNullApi +@NonNullFields package org.springframework.r2dbc.connection.init; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/package-info.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/package-info.java index 19d338ecf1..a85478547b 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/package-info.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/package-info.java @@ -1,6 +1,9 @@ /** * Core domain types around DatabaseClient. */ -@org.springframework.lang.NonNullApi -@org.springframework.lang.NonNullFields +@NonNullApi +@NonNullFields package org.springframework.r2dbc.core; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-test/src/main/java/org/springframework/test/context/event/annotation/package-info.java b/spring-test/src/main/java/org/springframework/test/context/event/annotation/package-info.java index 0e0796588f..f2a580e6ae 100644 --- a/spring-test/src/main/java/org/springframework/test/context/event/annotation/package-info.java +++ b/spring-test/src/main/java/org/springframework/test/context/event/annotation/package-info.java @@ -1,4 +1,9 @@ /** * Test execution event annotations for the Spring TestContext Framework. */ +@NonNullApi +@NonNullFields package org.springframework.test.context.event.annotation; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-test/src/main/java/org/springframework/test/context/event/package-info.java b/spring-test/src/main/java/org/springframework/test/context/event/package-info.java index 48e7b10730..1cee0ad6be 100644 --- a/spring-test/src/main/java/org/springframework/test/context/event/package-info.java +++ b/spring-test/src/main/java/org/springframework/test/context/event/package-info.java @@ -1,4 +1,9 @@ /** * Test event support classes for the Spring TestContext Framework. */ +@NonNullApi +@NonNullFields package org.springframework.test.context.event; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-test/src/main/java/org/springframework/test/package-info.java b/spring-test/src/main/java/org/springframework/test/package-info.java deleted file mode 100644 index 84bfe756c0..0000000000 --- a/spring-test/src/main/java/org/springframework/test/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Generic unit testing support classes. - * - * @see org.springframework.test.util - */ -package org.springframework.test; diff --git a/spring-test/src/main/java/org/springframework/test/web/package-info.java b/spring-test/src/main/java/org/springframework/test/web/package-info.java index f6cb06afa8..932a82dcfa 100644 --- a/spring-test/src/main/java/org/springframework/test/web/package-info.java +++ b/spring-test/src/main/java/org/springframework/test/web/package-info.java @@ -1,4 +1,9 @@ /** * Helper classes for unit tests based on Spring's web support. */ +@NonNullApi +@NonNullFields package org.springframework.test.web; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-web/src/main/java/org/springframework/http/codec/cbor/package-info.java b/spring-web/src/main/java/org/springframework/http/codec/cbor/package-info.java new file mode 100644 index 0000000000..9a7faa8f0e --- /dev/null +++ b/spring-web/src/main/java/org/springframework/http/codec/cbor/package-info.java @@ -0,0 +1,9 @@ +/** + * CBOR encoder and decoder support. + */ +@NonNullApi +@NonNullFields +package org.springframework.http.codec.cbor; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/package-info.java b/spring-web/src/main/java/org/springframework/web/context/request/async/package-info.java index 775d53e0d5..c9f78c659d 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/package-info.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/package-info.java @@ -1,4 +1,9 @@ /** * Support for asynchronous request processing. */ +@NonNullApi +@NonNullFields package org.springframework.web.context.request.async; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/package-info.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/package-info.java index 84a44ce740..b1185512ec 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/package-info.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/package-info.java @@ -2,4 +2,9 @@ * {@link org.springframework.web.reactive.result.condition.RequestCondition} * and implementations for matching requests based on different criteria. */ +@NonNullApi +@NonNullFields package org.springframework.web.reactive.result.condition; + +import org.springframework.lang.NonNullApi; +import org.springframework.lang.NonNullFields; diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index 3911f004d0..3298545cdd 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -2,12 +2,18 @@ - + + + + + + + + + - - @@ -17,6 +23,8 @@ + + @@ -31,9 +39,10 @@ - - + + + @@ -130,15 +139,4 @@ - - - - - - - - - - - diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 7dc9c48a31..26a0892929 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -1,6 +1,7 @@ + @@ -14,9 +15,29 @@ + + + + + + + + + + + + + + + + + + + + @@ -239,30 +260,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - +