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
This commit is contained in:
@@ -2,12 +2,18 @@
|
||||
<!DOCTYPE suppressions PUBLIC "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN" "https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
||||
<suppressions>
|
||||
|
||||
<!-- global -->
|
||||
<!-- Global: generated sources -->
|
||||
<suppress files="[\\/]build[\\/]generated[\\/]sources[\\/]" checks=".*"/>
|
||||
|
||||
<!-- Global: package-info.java -->
|
||||
<suppress files="(^(?!.+[\\/]src[\\/]main[\\/]java[\\/]).*)|(.*framework-docs.*)" checks="JavadocPackage" />
|
||||
<suppress files="(^(?!.+[\\/]src[\\/]main[\\/]java[\\/].*package-info\.java))|(.*framework-docs.*)|(.*spring-(context-indexer|instrument|jcl).*)" checks="RegexpSinglelineJava" id="packageLevelNonNullApiAnnotation" />
|
||||
<suppress files="(^(?!.+[\\/]src[\\/]main[\\/]java[\\/].*package-info\.java))|(.*framework-docs.*)|(.*spring-(context-indexer|instrument|jcl).*)" checks="RegexpSinglelineJava" id="packageLevelNonNullFieldsAnnotation" />
|
||||
|
||||
<!-- Global: tests and test fixtures -->
|
||||
<suppress files="[\\/]src[\\/](test|testFixtures)[\\/]java[\\/]" checks="AnnotationLocation|AnnotationUseStyle|AtclauseOrder|AvoidNestedBlocks|FinalClass|HideUtilityClassConstructor|InnerTypeLast|JavadocStyle|JavadocType|JavadocVariable|LeftCurly|MultipleVariableDeclarations|NeedBraces|OneTopLevelClass|OuterTypeFilename|RequireThis|SpringCatch|SpringJavadoc|SpringNoThis"/>
|
||||
<suppress files="[\\/]src[\\/](test|testFixtures)[\\/]java[\\/]org[\\/]springframework[\\/].+(Tests|Suite)" checks="IllegalImport" id="bannedJUnitJupiterImports"/>
|
||||
<suppress files="[\\/]src[\\/](test|testFixtures)[\\/]java[\\/]" checks="SpringJUnit5" message="should not be public"/>
|
||||
<!-- generated sources -->
|
||||
<suppress files="[\\/]build[\\/]generated[\\/]sources[\\/]" checks=".*"/>
|
||||
|
||||
<!-- JMH benchmarks -->
|
||||
<suppress files="[\\/]src[\\/]jmh[\\/]java[\\/]org[\\/]springframework[\\/]" checks="JavadocVariable|JavadocStyle|InnerTypeLast"/>
|
||||
@@ -17,6 +23,8 @@
|
||||
|
||||
<!-- spring-aop -->
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]aopalliance[\\/]" checks="IllegalImport" id="bannedImports" message="javax"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]aopalliance[\\/]" checks="RegexpSinglelineJava" id="packageLevelNonNullApiAnnotation"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]aopalliance[\\/]" checks="RegexpSinglelineJava" id="packageLevelNonNullFieldsAnnotation"/>
|
||||
|
||||
<!-- spring-beans -->
|
||||
<suppress files="TypeMismatchException" checks="MutableException"/>
|
||||
@@ -31,9 +39,10 @@
|
||||
<suppress files="SpringAtInjectTckTests" checks="IllegalImportCheck" id="bannedJUnit3Imports"/>
|
||||
|
||||
<!-- spring-core -->
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]asm[\\/]" checks=".*"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]cglib[\\/]" checks=".*"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/](asm|cglib|objenesis|javapoet)[\\/]" checks=".*"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]lang[\\/]" checks="IllegalImport" id="bannedImports" message="javax"/>
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]lang[\\/]" checks="RegexpSinglelineJava" id="packageLevelNonNullApiAnnotation" />
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]lang[\\/]" checks="RegexpSinglelineJava" id="packageLevelNonNullFieldsAnnotation" />
|
||||
<suppress files="[\\/]src[\\/]main[\\/]java[\\/]org[\\/]springframework[\\/]core[\\/]annotation[\\/]" checks="IllegalImport" id="bannedImports" message="javax"/>
|
||||
<suppress files="[\\/]src[\\/]test[\\/]java[\\/]org[\\/]springframework[\\/]core[\\/]annotation[\\/]" checks="IllegalImport" id="bannedImports" message="javax"/>
|
||||
<suppress files="ByteArrayEncoder" checks="SpringLambda"/>
|
||||
@@ -130,15 +139,4 @@
|
||||
<suppress files="sockjs[\\/]transport[\\/]TransportType" checks="JavadocVariable"/>
|
||||
<suppress files="src[\\/]test[\\/]java[\\/]org[\\/]springframework[\\/]web[\\/]reactive[\\/]protobuf[\\/].*" checks=".*"/>
|
||||
|
||||
<!-- Suppress JavadocPackage checks and package null safety annotations on packages outside of src/main-->
|
||||
<!-- And outside 'framework-docs' module-->
|
||||
<!-- And outside 'spring-core/src/main/java/org/springframework/asm' package-->
|
||||
<!-- And outside 'spring-core/src/main/java/org/springframework/cglib' package-->
|
||||
<!-- And outside 'spring-core/src/main/java/org/springframework/objenesis' package-->
|
||||
<!-- And outside 'spring-core/src/main/java/org/springframework/javapoet' package-->
|
||||
<!-- And outside 'spring-core/src/main/java/org/springframework/lang' package-->
|
||||
<suppress checks="JavadocPackage" files="(^(?!.*src[\\/]main[\\/]).*)|(.*framework-docs.*)|(.*spring-core\/src\/main\/java\/org\/springframework\/asm.*)|(.*spring-core\/src\/main\/java\/org\/springframework\/cglib.*)|(.*spring-core\/src\/main\/java\/org\/springframework\/objenesis.*)|(.*spring-core\/src\/main\/java\/org\/springframework\/javapoet.*)|(.*spring-core\/src\/main\/java\/org\/springframework\/lang.*)"/>
|
||||
<suppress checks="RegexpSinglelineJava" files="^(?!.*(package-info.java))" id="javaDocPackageNonNullFieldsAnnotation"/>
|
||||
<suppress checks="RegexpSinglelineJava" files="^(?!.*(package-info.java))" id="javaDocPackageNonNullApiAnnotation"/>
|
||||
|
||||
</suppressions>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
<module name="com.puppycrawl.tools.checkstyle.Checker">
|
||||
|
||||
<!-- Suppressions -->
|
||||
<module name="SuppressionFilter">
|
||||
<property name="file" value="${config_loc}/checkstyle-suppressions.xml"/>
|
||||
@@ -14,9 +15,29 @@
|
||||
<property name="packageInfoHeaderType" value="none"/>
|
||||
</module>
|
||||
<module name="com.puppycrawl.tools.checkstyle.checks.NewlineAtEndOfFileCheck"/>
|
||||
<module name="JavadocPackage" /><!-- package-info.java -->
|
||||
|
||||
<!-- TreeWalker Checks -->
|
||||
<module name="com.puppycrawl.tools.checkstyle.TreeWalker">
|
||||
|
||||
<!-- Package-level null-safety annotations -->
|
||||
<module name="RegexpSinglelineJavaCheck">
|
||||
<property name="id" value="packageLevelNonNullApiAnnotation"/>
|
||||
<property name="format" value="@NonNullApi"/>
|
||||
<property name="minimum" value="1"/>
|
||||
<property name="maximum" value="1"/>
|
||||
<property name="message" value="package-info.java is missing required null-safety annotation @NonNullApi."/>
|
||||
<property name="ignoreComments" value="true"/>
|
||||
</module>
|
||||
<module name="RegexpSinglelineJavaCheck">
|
||||
<property name="id" value="packageLevelNonNullFieldsAnnotation"/>
|
||||
<property name="format" value="@NonNullFields"/>
|
||||
<property name="minimum" value="1"/>
|
||||
<property name="maximum" value="1"/>
|
||||
<property name="message" value="package-info.java is missing required null-safety annotation @NonNullFields."/>
|
||||
<property name="ignoreComments" value="true"/>
|
||||
</module>
|
||||
|
||||
<!-- Annotations -->
|
||||
<module name="com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck">
|
||||
<property name="elementStyle" value="compact"/>
|
||||
@@ -239,30 +260,7 @@
|
||||
<module name="io.spring.javaformat.checkstyle.check.SpringCatchCheck"/>
|
||||
<module name="io.spring.javaformat.checkstyle.check.SpringJavadocCheck"/>
|
||||
<module name="io.spring.javaformat.checkstyle.check.SpringJUnit5Check"/>
|
||||
<!--package-info should contain null-safety annotations-->
|
||||
<!--These two modules will fail to detect multiline annotations-->
|
||||
<module name="RegexpSinglelineJavaCheck">
|
||||
<property name="id" value="javaDocPackageNonNullFieldsAnnotation"/>
|
||||
<property name="format" value="(@NonNullFields|@org\.springframework\.lang\.NonNullFields)"/>
|
||||
<property name="minimum" value="1"/>
|
||||
<property name="maximum" value="1"/>
|
||||
<property name="severity" value="warning"/>
|
||||
<property name="message" value="package-info.java is missing required null-safety annotation @NonNullFields."/>
|
||||
<property name="ignoreComments" value="true"/>
|
||||
</module>
|
||||
<module name="RegexpSinglelineJavaCheck">
|
||||
<property name="id" value="javaDocPackageNonNullApiAnnotation"/>
|
||||
<property name="format" value="(@NonNullApi|@org\.springframework\.lang\.NonNullApi)"/>
|
||||
<property name="minimum" value="1"/>
|
||||
<property name="maximum" value="1"/>
|
||||
<property name="severity" value="warning"/>
|
||||
<property name="message" value="package-info.java is missing required null-safety annotation @NonNullApi."/>
|
||||
<property name="ignoreComments" value="true"/>
|
||||
</module>
|
||||
</module>
|
||||
|
||||
<!--package-info checker -->
|
||||
<module name="JavadocPackage">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
</module>
|
||||
|
||||
Reference in New Issue
Block a user