diff --git a/build.gradle b/build.gradle index d7d66aac7e6..34994ae51f5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { id 'com.github.bjornvester.xjc' version '1.8.2' apply false id 'com.gradleup.shadow' version "9.2.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 { diff --git a/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureCheck.java b/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureCheck.java index 0ee329acdfb..223796142e2 100644 --- a/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureCheck.java +++ b/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.noClassesShouldCallStringToLowerCaseWithoutLocale; import static org.springframework.build.architecture.ArchitectureRules.noClassesShouldCallStringToUpperCaseWithoutLocale; -import static org.springframework.build.architecture.ArchitectureRules.packageInfoShouldBeNullMarked; /** * {@link Task} that checks for architecture problems. @@ -64,8 +63,7 @@ public abstract class ArchitectureCheck extends DefaultTask { public ArchitectureCheck() { getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName())); getProhibitObjectsRequireNonNull().convention(true); - getRules().addAll(packageInfoShouldBeNullMarked(), - classesShouldNotImportForbiddenTypes(), + getRules().addAll(classesShouldNotImportForbiddenTypes(), javaClassesShouldNotImportKotlinAnnotations(), allPackagesShouldBeFreeOfTangles(), noClassesShouldCallStringToLowerCaseWithoutLocale(), diff --git a/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureRules.java b/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureRules.java index b179a0a34f8..9e52b5f50e0 100644 --- a/buildSrc/src/main/java/org/springframework/build/architecture/ArchitectureRules.java +++ b/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"); } - static ArchRule packageInfoShouldBeNullMarked() { - return ArchRuleDefinition.classes() - .that().haveSimpleName("package-info") - .should().beAnnotatedWith("org.jspecify.annotations.NullMarked") - .allowEmptyShould(true); - } - static ArchRule classesShouldNotImportForbiddenTypes() { return ArchRuleDefinition.noClasses() .should().dependOnClassesThat() diff --git a/gradle/spring-module.gradle b/gradle/spring-module.gradle index 95886e677e0..09755cdac4a 100644 --- a/gradle/spring-module.gradle +++ b/gradle/spring-module.gradle @@ -105,10 +105,6 @@ tasks.register('javadocJar', Jar) { from javadoc } -nullability { - nullAwayVersion = "0.12.15" -} - publishing { publications { mavenJava(MavenPublication) { diff --git a/spring-context-indexer/spring-context-indexer.gradle b/spring-context-indexer/spring-context-indexer.gradle index a0f311ee6d5..55635550ee6 100644 --- a/spring-context-indexer/spring-context-indexer.gradle +++ b/spring-context-indexer/spring-context-indexer.gradle @@ -7,3 +7,7 @@ dependencies { testImplementation("jakarta.persistence:jakarta.persistence-api") testImplementation("jakarta.transaction:jakarta.transaction-api") } + +nullability { + requireExplicitNullMarking = false +} diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java index b282705390b..2140e0acec3 100644 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java +++ b/spring-context/src/main/java/org/springframework/instrument/classloading/glassfish/package-info.java @@ -1,4 +1,7 @@ /** * Support for class instrumentation on GlassFish. */ +@NullUnmarked package org.springframework.instrument.classloading.glassfish; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/jboss/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/jboss/package-info.java index e746ce5e7f5..14cb0f20efc 100644 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/jboss/package-info.java +++ b/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. */ +@NullUnmarked package org.springframework.instrument.classloading.jboss; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/package-info.java index c1b7cf3d2cb..917cbb6fb87 100644 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/package-info.java +++ b/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, * as required by JPA providers (but not JPA-specific). */ +@NullUnmarked package org.springframework.instrument.classloading; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java index 11c70a1c6c5..61a64695930 100644 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java +++ b/spring-context/src/main/java/org/springframework/instrument/classloading/tomcat/package-info.java @@ -1,4 +1,7 @@ /** * Support for class instrumentation on Tomcat. */ +@NullUnmarked package org.springframework.instrument.classloading.tomcat; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/feature/package-info.java b/spring-core/src/main/java/org/springframework/aot/nativex/feature/package-info.java index 11e2830acb7..890eab95fff 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/feature/package-info.java +++ b/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. */ +@NullUnmarked package org.springframework.aot.nativex.feature; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/substitution/package-info.java b/spring-core/src/main/java/org/springframework/aot/nativex/substitution/package-info.java index e095edccc66..c17694d5642 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/substitution/package-info.java +++ b/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. */ +@NullUnmarked package org.springframework.aot.nativex.substitution; + +import org.jspecify.annotations.NullUnmarked; diff --git a/spring-core/src/main/java/org/springframework/asm/package-info.java b/spring-core/src/main/java/org/springframework/asm/package-info.java index d9d8417817b..3d0566f5e73 100644 --- a/spring-core/src/main/java/org/springframework/asm/package-info.java +++ b/spring-core/src/main/java/org/springframework/asm/package-info.java @@ -10,4 +10,7 @@ *

As this repackaging happens at the class file level, sources * and javadocs are not available here. */ +@NullUnmarked package org.springframework.asm; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/beans/package-info.java b/spring-core/src/main/java/org/springframework/cglib/beans/package-info.java index a75c6124de9..c59cf30364e 100644 --- a/spring-core/src/main/java/org/springframework/cglib/beans/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/beans/package-info.java @@ -3,4 +3,7 @@ * CGLIB beans package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.beans; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java b/spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java index 8c30df61928..27d34c0c9eb 100644 --- a/spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/core/internal/package-info.java @@ -3,4 +3,7 @@ * CGLIB core internal package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.core.internal; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/core/package-info.java b/spring-core/src/main/java/org/springframework/cglib/core/package-info.java index d68373f270c..5349b90a3bb 100644 --- a/spring-core/src/main/java/org/springframework/cglib/core/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/core/package-info.java @@ -3,4 +3,7 @@ * CGLIB core package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.core; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/package-info.java b/spring-core/src/main/java/org/springframework/cglib/package-info.java index b2462d4d763..ba1486e46b4 100644 --- a/spring-core/src/main/java/org/springframework/cglib/package-info.java +++ b/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 * libraries and frameworks. */ +@NullUnmarked package org.springframework.cglib; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java b/spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java index cb92f510fe2..92e8546d778 100644 --- a/spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/proxy/package-info.java @@ -3,4 +3,7 @@ * CGLIB proxy package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.proxy; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java b/spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java index cd1f3a84989..c5fe05e0245 100644 --- a/spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/reflect/package-info.java @@ -3,4 +3,7 @@ * CGLIB reflect package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.reflect; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java b/spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java index df2014cfc8d..a73056c48a5 100644 --- a/spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/transform/impl/package-info.java @@ -3,4 +3,7 @@ * CGLIB transform impl package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.transform.impl; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/transform/package-info.java b/spring-core/src/main/java/org/springframework/cglib/transform/package-info.java index 2a6a57f0311..64ce6a010f1 100644 --- a/spring-core/src/main/java/org/springframework/cglib/transform/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/transform/package-info.java @@ -3,4 +3,7 @@ * CGLIB transform package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.transform; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/cglib/util/package-info.java b/spring-core/src/main/java/org/springframework/cglib/util/package-info.java index 17abeed0694..0f7b8e97f6a 100644 --- a/spring-core/src/main/java/org/springframework/cglib/util/package-info.java +++ b/spring-core/src/main/java/org/springframework/cglib/util/package-info.java @@ -3,4 +3,7 @@ * CGLIB util package * (for internal use only). */ +@NullUnmarked package org.springframework.cglib.util; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-core/src/main/java/org/springframework/objenesis/package-info.java b/spring-core/src/main/java/org/springframework/objenesis/package-info.java index 166e59b9c83..b53ceffc3cc 100644 --- a/spring-core/src/main/java/org/springframework/objenesis/package-info.java +++ b/spring-core/src/main/java/org/springframework/objenesis/package-info.java @@ -12,4 +12,7 @@ * Objenesis docs * for details when working with these classes. */ +@NullUnmarked package org.springframework.objenesis; + +import org.jspecify.annotations.NullUnmarked; \ No newline at end of file diff --git a/spring-instrument/spring-instrument.gradle b/spring-instrument/spring-instrument.gradle index f919051dee4..56289b9a6b5 100644 --- a/spring-instrument/spring-instrument.gradle +++ b/spring-instrument/spring-instrument.gradle @@ -9,3 +9,7 @@ jar { manifest.attributes["Can-Retransform-Classes"] = "true" manifest.attributes["Can-Set-Native-Method-Prefix"] = "false" } + +nullability { + requireExplicitNullMarking = false +}