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:
Sam Brannen
2023-03-10 16:03:44 +01:00
parent 7e32f504b0
commit 99e54fec3a
22 changed files with 165 additions and 50 deletions

View File

@@ -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>