Skip to content

Commit 545d3f9

Browse files
committed
Migrate to JSpecify for nullability constraints
See #1150 Signed-off-by: Chris Bono <[email protected]>
1 parent 5bf05c0 commit 545d3f9

File tree

149 files changed

+1142
-1105
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

149 files changed

+1142
-1105
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
alias(libs.plugins.grgit) apply false
66
alias(libs.plugins.versions)
77
alias(libs.plugins.version.catalog.update)
8+
id 'io.spring.nullability' version '0.0.1' apply false
89
}
910

1011
description = 'Spring for Apache Pulsar'
@@ -14,6 +15,7 @@ apply from: 'gradle/aggregate-jacoco-report.gradle'
1415
apply from: 'gradle/update-copyrights.gradle'
1516
apply from: 'gradle/version-catalog-update.gradle'
1617
apply from: 'gradle/java-conventions.gradle'
18+
apply from: 'gradle/nullability-conventions.gradle'
1719

1820
allprojects {
1921
group = 'org.springframework.pulsar'

buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@
2424
import org.gradle.api.DefaultTask;
2525
import org.gradle.api.Project;
2626
import org.gradle.api.artifacts.VersionCatalogsExtension;
27-
28-
import org.springframework.lang.Nullable;
27+
import org.jspecify.annotations.Nullable;
2928

3029
public abstract class UpdateProjectVersionTask extends DefaultTask {
3130

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
caffeine = "3.2.2"
44
commons-compress = "1.26.2"
55
jackson = "2.19.1"
6-
jsr305 = "3.0.2"
6+
jspecify = "1.0.0"
77
logback = "1.5.18"
88
micrometer = "1.15.2"
99
micrometer-docs-gen = "1.0.4"
@@ -43,7 +43,7 @@ protobuf-plugin = "0.9.5"
4343
# Product libs
4444
caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" }
4545
jackson-bom = { module = "com.fasterxml.jackson:jackson-bom", version.ref = "jackson" }
46-
jsr305 = { module = "com.google.code.findbugs:jsr305", version.ref = "jsr305" }
46+
jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" }
4747
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
4848
micrometer-bom = { module = "io.micrometer:micrometer-bom", version.ref = "micrometer" }
4949
micrometer-docs-gen = { module = "io.micrometer:micrometer-docs-generator", version.ref = "micrometer-docs-gen" }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def javaProjects = [ 'spring-pulsar',
2+
'spring-pulsar-cache-provider',
3+
'spring-pulsar-cache-provider-caffeine',
4+
'spring-pulsar-reactive',
5+
'spring-pulsar-test' ]
6+
7+
allprojects {
8+
if (!javaProjects.contains(project.name)) {
9+
return
10+
}
11+
apply plugin: 'io.spring.nullability'
12+
}

integration-tests/src/intTest/java/org/springframework/pulsar/inttest/function/PulsarFunctionAdministrationIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.pulsar.client.api.PulsarClientException;
3838
import org.apache.pulsar.common.io.SourceConfig;
3939
import org.apache.pulsar.common.policies.data.SourceStatus;
40+
import org.jspecify.annotations.Nullable;
4041
import org.junit.jupiter.api.BeforeAll;
4142
import org.junit.jupiter.api.Test;
4243
import org.junit.jupiter.api.condition.EnabledIf;
@@ -62,7 +63,6 @@
6263
import org.springframework.core.io.Resource;
6364
import org.springframework.core.io.support.ResourcePatternUtils;
6465
import org.springframework.core.log.LogAccessor;
65-
import org.springframework.lang.Nullable;
6666
import org.springframework.pulsar.annotation.PulsarListener;
6767
import org.springframework.pulsar.function.PulsarFunctionAdministration;
6868
import org.springframework.pulsar.function.PulsarFunctionOperations.FunctionStopPolicy;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* Package containing components to support Pulsar Caffeine cache provider.
3+
*/
4+
@org.jspecify.annotations.NullMarked
5+
package org.springframework.pulsar.cache.provider.caffeine;

spring-pulsar-dependencies/spring-pulsar-dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependencies {
2222
constraints {
2323
api libs.logback.classic
2424
api libs.caffeine
25-
api libs.jsr305
25+
api libs.jspecify
2626
api libs.protobuf.java
2727
api libs.json.path
2828
api libs.micrometer.docs.gen

spring-pulsar-reactive/spring-pulsar-reactive.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ dependencies {
2727
}
2828
implementation 'com.fasterxml.jackson.core:jackson-core'
2929
implementation 'com.fasterxml.jackson.core:jackson-databind'
30-
implementation libs.jsr305
30+
implementation libs.jspecify
3131
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
3232
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
3333
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'

spring-pulsar-reactive/src/main/java/org/springframework/pulsar/reactive/aot/ReactivePulsarRuntimeHints.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@
3333
import org.apache.pulsar.shade.io.netty.channel.socket.nio.NioDatagramChannel;
3434
import org.apache.pulsar.shade.io.netty.channel.socket.nio.NioSocketChannel;
3535
import org.apache.pulsar.shade.io.netty.util.ReferenceCountUtil;
36+
import org.jspecify.annotations.Nullable;
3637

3738
import org.springframework.aot.hint.MemberCategory;
3839
import org.springframework.aot.hint.ReflectionHints;
3940
import org.springframework.aot.hint.RuntimeHints;
4041
import org.springframework.aot.hint.RuntimeHintsRegistrar;
4142
import org.springframework.aot.hint.TypeReference;
42-
import org.springframework.lang.Nullable;
43+
import org.springframework.util.Assert;
4344
import org.springframework.util.ReflectionUtils;
4445

4546
/**
@@ -149,7 +150,9 @@ public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader)
149150
MemberCategory.INVOKE_PUBLIC_METHODS,
150151
MemberCategory.INVOKE_DECLARED_METHODS,
151152
MemberCategory.ACCESS_DECLARED_FIELDS)));
152-
reflectionHints.registerField(ReflectionUtils.findField(Thread.class, "threadLocalRandomProbe"));
153+
var threadLocalRandomProbeField = ReflectionUtils.findField(Thread.class, "threadLocalRandomProbe");
154+
Assert.notNull(threadLocalRandomProbeField, "threadLocalRandomProbe not found on Thread.class");
155+
reflectionHints.registerField(threadLocalRandomProbeField);
153156

154157
// @formatter:on
155158

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
/**
22
* Package containing Reactive AOT runtime hints used by the framework.
33
*/
4-
@NonNullApi
5-
@NonNullFields
4+
@org.jspecify.annotations.NullMarked
65
package org.springframework.pulsar.reactive.aot;
7-
8-
import org.springframework.lang.NonNullApi;
9-
import org.springframework.lang.NonNullFields;

0 commit comments

Comments
 (0)