Browse Source

Upgrade to nullability plugin 0.0.9

This commit also replaces Arch Unit packageInfoShouldBeNullMarked() rule
by either configuring requireExplicitNullMarking = false when the whole
module does not have JSpecify annotations, or explicit @NullUnmarked
when some have and some don't.

See gh-36054
pull/36089/head
Sébastien Deleuze 1 month ago
parent
commit
46fb7c026c
  1. 2
      build.gradle
  2. 4
      buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureCheck.java
  3. 7
      buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureRules.java
  4. 4
      gradle/spring-module.gradle
  5. 4
      spring-context-indexer/spring-context-indexer.gradle
  6. 3
      spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java
  7. 3
      spring-context/src/main/java/org/springframework/instrument/classloading/jboss/package-info.java
  8. 3
      spring-context/src/main/java/org/springframework/instrument/classloading/package-info.java
  9. 3
      spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java
  10. 3
      spring-core/src/main/java/org/springframework/aot/nativex/feature/package-info.java
  11. 3
      spring-core/src/main/java/org/springframework/aot/nativex/substitution/package-info.java
  12. 3
      spring-core/src/main/java/org/springframework/asm/package-info.java
  13. 3
      spring-core/src/main/java/org/springframework/cglib/beans/package-info.java
  14. 3
      spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java
  15. 3
      spring-core/src/main/java/org/springframework/cglib/core/package-info.java
  16. 3
      spring-core/src/main/java/org/springframework/cglib/package-info.java
  17. 3
      spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java
  18. 3
      spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java
  19. 3
      spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java
  20. 3
      spring-core/src/main/java/org/springframework/cglib/transform/package-info.java
  21. 3
      spring-core/src/main/java/org/springframework/cglib/util/package-info.java
  22. 3
      spring-core/src/main/java/org/springframework/objenesis/package-info.java
  23. 4
      spring-instrument/spring-instrument.gradle

2
build.gradle

@ -6,7 +6,7 @@ plugins {
id 'com.github.bjornvester.xjc' version '1.8.2' apply false id 'com.github.bjornvester.xjc' version '1.8.2' apply false
id 'com.gradleup.shadow' version "9.2.2" apply false id 'com.gradleup.shadow' version "9.2.2" apply false
id 'me.champeau.jmh' version '0.7.2' apply false id 'me.champeau.jmh' version '0.7.2' apply false
id 'io.spring.nullability' version '0.0.8' apply false id 'io.spring.nullability' version '0.0.9' apply false
} }
ext { ext {

4
buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureCheck.java

@ -49,7 +49,6 @@ import static org.springframework.build.architecture.ArchitectureRules.classesSh
import static org.springframework.build.architecture.ArchitectureRules.javaClassesShouldNotImportKotlinAnnotations; import static org.springframework.build.architecture.ArchitectureRules.javaClassesShouldNotImportKotlinAnnotations;
import static org.springframework.build.architecture.ArchitectureRules.noClassesShouldCallStringToLowerCaseWithoutLocale; import static org.springframework.build.architecture.ArchitectureRules.noClassesShouldCallStringToLowerCaseWithoutLocale;
import static org.springframework.build.architecture.ArchitectureRules.noClassesShouldCallStringToUpperCaseWithoutLocale; import static org.springframework.build.architecture.ArchitectureRules.noClassesShouldCallStringToUpperCaseWithoutLocale;
import static org.springframework.build.architecture.ArchitectureRules.packageInfoShouldBeNullMarked;
/** /**
* {@link Task} that checks for architecture problems. * {@link Task} that checks for architecture problems.
@ -64,8 +63,7 @@ public abstract class ArchitectureCheck extends DefaultTask {
public ArchitectureCheck() { public ArchitectureCheck() {
getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName())); getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName()));
getProhibitObjectsRequireNonNull().convention(true); getProhibitObjectsRequireNonNull().convention(true);
getRules().addAll(packageInfoShouldBeNullMarked(), getRules().addAll(classesShouldNotImportForbiddenTypes(),
classesShouldNotImportForbiddenTypes(),
javaClassesShouldNotImportKotlinAnnotations(), javaClassesShouldNotImportKotlinAnnotations(),
allPackagesShouldBeFreeOfTangles(), allPackagesShouldBeFreeOfTangles(),
noClassesShouldCallStringToLowerCaseWithoutLocale(), noClassesShouldCallStringToLowerCaseWithoutLocale(),

7
buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureRules.java

@ -46,13 +46,6 @@ abstract class ArchitectureRules {
.because("String.toUpperCase(Locale.ROOT) should be used instead"); .because("String.toUpperCase(Locale.ROOT) should be used instead");
} }
static ArchRule packageInfoShouldBeNullMarked() {
return ArchRuleDefinition.classes()
.that().haveSimpleName("package-info")
.should().beAnnotatedWith("org.jspecify.annotations.NullMarked")
.allowEmptyShould(true);
}
static ArchRule classesShouldNotImportForbiddenTypes() { static ArchRule classesShouldNotImportForbiddenTypes() {
return ArchRuleDefinition.noClasses() return ArchRuleDefinition.noClasses()
.should().dependOnClassesThat() .should().dependOnClassesThat()

4
gradle/spring-module.gradle

@ -105,10 +105,6 @@ tasks.register('javadocJar', Jar) {
from javadoc from javadoc
} }
nullability {
nullAwayVersion = "0.12.15"
}
publishing { publishing {
publications { publications {
mavenJava(MavenPublication) { mavenJava(MavenPublication) {

4
spring-context-indexer/spring-context-indexer.gradle

@ -7,3 +7,7 @@ dependencies {
testImplementation("jakarta.persistence:jakarta.persistence-api") testImplementation("jakarta.persistence:jakarta.persistence-api")
testImplementation("jakarta.transaction:jakarta.transaction-api") testImplementation("jakarta.transaction:jakarta.transaction-api")
} }
nullability {
requireExplicitNullMarking = false
}

3
spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java

@ -1,4 +1,7 @@
/** /**
* Support for class instrumentation on GlassFish. * Support for class instrumentation on GlassFish.
*/ */
@NullUnmarked
package org.springframework.instrument.classloading.glassfish; package org.springframework.instrument.classloading.glassfish;
import org.jspecify.annotations.NullUnmarked;

3
spring-context/src/main/java/org/springframework/instrument/classloading/jboss/package-info.java

@ -1,4 +1,7 @@
/** /**
* Support for class instrumentation on JBoss AS 6 and 7. * Support for class instrumentation on JBoss AS 6 and 7.
*/ */
@NullUnmarked
package org.springframework.instrument.classloading.jboss; package org.springframework.instrument.classloading.jboss;
import org.jspecify.annotations.NullUnmarked;

3
spring-context/src/main/java/org/springframework/instrument/classloading/package-info.java

@ -2,4 +2,7 @@
* Support package for load time weaving based on class loaders, * Support package for load time weaving based on class loaders,
* as required by JPA providers (but not JPA-specific). * as required by JPA providers (but not JPA-specific).
*/ */
@NullUnmarked
package org.springframework.instrument.classloading; package org.springframework.instrument.classloading;
import org.jspecify.annotations.NullUnmarked;

3
spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java

@ -1,4 +1,7 @@
/** /**
* Support for class instrumentation on Tomcat. * Support for class instrumentation on Tomcat.
*/ */
@NullUnmarked
package org.springframework.instrument.classloading.tomcat; package org.springframework.instrument.classloading.tomcat;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/aot/nativex/feature/package-info.java

@ -1,4 +1,7 @@
/** /**
* GraalVM native image features, not part of Spring Framework public API. * GraalVM native image features, not part of Spring Framework public API.
*/ */
@NullUnmarked
package org.springframework.aot.nativex.feature; package org.springframework.aot.nativex.feature;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/aot/nativex/substitution/package-info.java

@ -1,4 +1,7 @@
/** /**
* GraalVM native image substitutions, not part of Spring Framework public API. * GraalVM native image substitutions, not part of Spring Framework public API.
*/ */
@NullUnmarked
package org.springframework.aot.nativex.substitution; package org.springframework.aot.nativex.substitution;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/asm/package-info.java

@ -10,4 +10,7 @@
* <p>As this repackaging happens at the class file level, sources * <p>As this repackaging happens at the class file level, sources
* and javadocs are not available here. * and javadocs are not available here.
*/ */
@NullUnmarked
package org.springframework.asm; package org.springframework.asm;
import org.jspecify.annotations.NullUnmarked;

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

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> beans package * <a href="https://github.com/cglib/cglib">CGLIB</a> beans package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.beans; package org.springframework.cglib.beans;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> core internal package * <a href="https://github.com/cglib/cglib">CGLIB</a> core internal package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.core.internal; package org.springframework.cglib.core.internal;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/core/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> core package * <a href="https://github.com/cglib/cglib">CGLIB</a> core package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.core; package org.springframework.cglib.core;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/package-info.java

@ -7,4 +7,7 @@
* dependencies on CGLIB at the application level or from third-party * dependencies on CGLIB at the application level or from third-party
* libraries and frameworks. * libraries and frameworks.
*/ */
@NullUnmarked
package org.springframework.cglib; package org.springframework.cglib;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> proxy package * <a href="https://github.com/cglib/cglib">CGLIB</a> proxy package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.proxy; package org.springframework.cglib.proxy;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> reflect package * <a href="https://github.com/cglib/cglib">CGLIB</a> reflect package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.reflect; package org.springframework.cglib.reflect;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> transform impl package * <a href="https://github.com/cglib/cglib">CGLIB</a> transform impl package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.transform.impl; package org.springframework.cglib.transform.impl;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/transform/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> transform package * <a href="https://github.com/cglib/cglib">CGLIB</a> transform package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.transform; package org.springframework.cglib.transform;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/cglib/util/package-info.java

@ -3,4 +3,7 @@
* <a href="https://github.com/cglib/cglib">CGLIB</a> util package * <a href="https://github.com/cglib/cglib">CGLIB</a> util package
* (for internal use only). * (for internal use only).
*/ */
@NullUnmarked
package org.springframework.cglib.util; package org.springframework.cglib.util;
import org.jspecify.annotations.NullUnmarked;

3
spring-core/src/main/java/org/springframework/objenesis/package-info.java

@ -12,4 +12,7 @@
* <a href="http://objenesis.org/tutorial.html">Objenesis docs</a> * <a href="http://objenesis.org/tutorial.html">Objenesis docs</a>
* for details when working with these classes. * for details when working with these classes.
*/ */
@NullUnmarked
package org.springframework.objenesis; package org.springframework.objenesis;
import org.jspecify.annotations.NullUnmarked;

4
spring-instrument/spring-instrument.gradle

@ -9,3 +9,7 @@ jar {
manifest.attributes["Can-Retransform-Classes"] = "true" manifest.attributes["Can-Retransform-Classes"] = "true"
manifest.attributes["Can-Set-Native-Method-Prefix"] = "false" manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
} }
nullability {
requireExplicitNullMarking = false
}

Loading…
Cancel
Save