Skip to content

Commit b3b401e

Browse files
committed
Migrate to JSpecify annotations for nullability constraints
This change also introduces NullAway to verify that all code is correctly annotated. Signed-off-by: Stefano Cordio <stefano.cordio@gmail.com>
1 parent 30b5120 commit b3b401e

File tree

320 files changed

+550
-409
lines changed

Some content is hidden

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

320 files changed

+550
-409
lines changed

pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@
156156
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
157157
<spring-javaformat-maven-plugin.version>0.0.39</spring-javaformat-maven-plugin.version>
158158
<error-prone.version>2.38.0</error-prone.version>
159+
<nullaway.version>0.12.7</nullaway.version>
159160
</properties>
160161

161162
<build>
@@ -226,6 +227,8 @@
226227
-Xep:UnusedMethod:OFF
227228
-Xep:UnusedVariable:OFF
228229
-Xep:WaitNotInLoop:OFF
230+
<!-- Check JSpecify annotations -->
231+
-XepOpt:NullAway:OnlyNullMarked
229232
</compilerArg>
230233
</compilerArgs>
231234
<failOnWarning>true</failOnWarning>
@@ -235,6 +238,11 @@
235238
<artifactId>error_prone_core</artifactId>
236239
<version>${error-prone.version}</version>
237240
</path>
241+
<path>
242+
<groupId>com.uber.nullaway</groupId>
243+
<artifactId>nullaway</artifactId>
244+
<version>${nullaway.version}</version>
245+
</path>
238246
</annotationProcessorPaths>
239247
</configuration>
240248
</plugin>

spring-batch-core/src/main/java/org/springframework/batch/core/ItemProcessListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.item.ItemProcessor;
19-
import org.springframework.lang.Nullable;
2021

2122
/**
2223
* Listener interface for the processing of an item. Implementations of this interface are

spring-batch-core/src/main/java/org/springframework/batch/core/Job.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.core.job.DefaultJobParametersValidator;
19-
import org.springframework.lang.Nullable;
2021

2122
/**
2223
* Batch domain object representing a job. {@code Job} is an explicit abstraction

spring-batch-core/src/main/java/org/springframework/batch/core/JobExecution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
import java.util.concurrent.CopyOnWriteArrayList;
3131

3232
import org.springframework.batch.item.ExecutionContext;
33-
import org.springframework.lang.Nullable;
33+
34+
import org.jspecify.annotations.Nullable;
3435

3536
/**
3637
* Batch domain object representing the execution of a job.

spring-batch-core/src/main/java/org/springframework/batch/core/JobParameter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818

1919
import java.io.Serializable;
2020

21-
import org.springframework.lang.NonNull;
2221
import org.springframework.util.Assert;
2322

23+
import org.jspecify.annotations.NonNull;
24+
2425
/**
2526
* Domain representation of a parameter to a batch job. The identifying flag is used to
2627
* indicate if the parameter is to be used as part of the identification of a job

spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@
2727
import java.util.List;
2828
import java.util.Map;
2929

30-
import org.springframework.lang.Nullable;
3130
import org.springframework.util.Assert;
3231

32+
import org.jspecify.annotations.Nullable;
33+
3334
/**
3435
* Value object representing runtime parameters to a batch job. Because the parameters
3536
* have no individual meaning outside of the {@code JobParameters} object they are

spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
import java.util.Map;
2525

2626
import org.springframework.batch.core.repository.explore.JobExplorer;
27-
import org.springframework.lang.NonNull;
27+
28+
import org.jspecify.annotations.NonNull;
2829
import org.springframework.util.Assert;
2930

3031
/**

spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersIncrementer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18-
import org.springframework.lang.Nullable;
18+
import org.jspecify.annotations.Nullable;
1919

2020
/**
2121
* Interface for obtaining the next {@link JobParameters} object in a sequence.

spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18-
import org.springframework.lang.Nullable;
18+
import org.jspecify.annotations.Nullable;
1919

2020
/**
2121
* Strategy interface for a {@link Job} to use in validating its parameters for an

spring-batch-core/src/main/java/org/springframework/batch/core/SpringBatchVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18-
import org.springframework.lang.Nullable;
18+
import org.jspecify.annotations.Nullable;
1919

2020
/**
2121
* Class that exposes the Spring Batch version. Fetches the "Implementation-Version"

spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
import java.util.concurrent.CopyOnWriteArrayList;
2525

2626
import org.springframework.batch.item.ExecutionContext;
27-
import org.springframework.lang.Nullable;
27+
28+
import org.jspecify.annotations.Nullable;
2829
import org.springframework.util.Assert;
2930

3031
/**

spring-batch-core/src/main/java/org/springframework/batch/core/StepExecutionListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.batch.core;
1717

18-
import org.springframework.lang.Nullable;
18+
import org.jspecify.annotations.Nullable;
1919

2020
/**
2121
* Listener interface for the lifecycle of a {@link Step}.

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/JobLocator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
*/
1616
package org.springframework.batch.core.configuration;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.core.Job;
1921
import org.springframework.batch.core.launch.NoSuchJobException;
20-
import org.springframework.lang.Nullable;
2122

2223
/**
2324
* A runtime service locator interface for retrieving job configurations by

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.configuration.annotation;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.configuration;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultJobLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import org.apache.commons.logging.Log;
2525
import org.apache.commons.logging.LogFactory;
26+
import org.jspecify.annotations.Nullable;
2627

2728
import org.springframework.batch.core.Job;
2829
import org.springframework.batch.core.Step;
@@ -34,7 +35,6 @@
3435
import org.springframework.beans.factory.InitializingBean;
3536
import org.springframework.context.ApplicationContext;
3637
import org.springframework.context.ConfigurableApplicationContext;
37-
import org.springframework.lang.Nullable;
3838
import org.springframework.util.Assert;
3939

4040
/**

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/GroupAwareJob.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
*/
1616
package org.springframework.batch.core.configuration.support;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.core.Job;
1921
import org.springframework.batch.core.JobExecution;
2022
import org.springframework.batch.core.JobParametersIncrementer;
2123
import org.springframework.batch.core.JobParametersValidator;
22-
import org.springframework.lang.Nullable;
2324
import org.springframework.util.ClassUtils;
2425

2526
/**

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/MapJobRegistry.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
import org.apache.commons.logging.Log;
2525
import org.apache.commons.logging.LogFactory;
26+
import org.jspecify.annotations.Nullable;
27+
2628
import org.springframework.batch.core.Job;
2729
import org.springframework.batch.core.configuration.DuplicateJobException;
2830
import org.springframework.batch.core.configuration.JobRegistry;
@@ -31,7 +33,6 @@
3133
import org.springframework.beans.factory.SmartInitializingSingleton;
3234
import org.springframework.context.ApplicationContext;
3335
import org.springframework.context.ApplicationContextAware;
34-
import org.springframework.lang.Nullable;
3536
import org.springframework.util.Assert;
3637

3738
/**

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.configuration.support;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.configuration.xml;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/converter/DefaultJobParametersConverter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@
2020
import java.util.Properties;
2121

2222
import org.springframework.batch.core.JobParameter;
23+
24+
import org.jspecify.annotations.NonNull;
25+
import org.jspecify.annotations.Nullable;
2326
import org.springframework.batch.core.JobParameters;
2427
import org.springframework.batch.core.JobParametersBuilder;
2528
import org.springframework.core.convert.support.ConfigurableConversionService;
2629
import org.springframework.core.convert.support.DefaultConversionService;
27-
import org.springframework.lang.NonNull;
28-
import org.springframework.lang.Nullable;
2930
import org.springframework.util.Assert;
3031
import org.springframework.util.StringUtils;
3132

spring-batch-core/src/main/java/org/springframework/batch/core/converter/JobParametersConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
import java.util.Properties;
2020

2121
import org.springframework.batch.core.JobParameters;
22+
23+
import org.jspecify.annotations.Nullable;
2224
import org.springframework.batch.core.JobParametersBuilder;
23-
import org.springframework.lang.Nullable;
2425

2526
/**
2627
* A factory for {@link JobParameters} instances. A job can be executed with many possible

spring-batch-core/src/main/java/org/springframework/batch/core/converter/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* @author Michael Minella
66
* @author Mahmoud Ben Hassine
77
*/
8-
@NonNullApi
8+
@NullMarked
99
package org.springframework.batch.core.converter;
1010

11-
import org.springframework.lang.NonNullApi;
11+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/job/AbstractJob.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.micrometer.observation.ObservationRegistry;
3030
import org.apache.commons.logging.Log;
3131
import org.apache.commons.logging.LogFactory;
32+
import org.jspecify.annotations.Nullable;
3233

3334
import org.springframework.batch.core.BatchStatus;
3435
import org.springframework.batch.core.ExitStatus;
@@ -58,7 +59,6 @@
5859
import org.springframework.batch.repeat.RepeatException;
5960
import org.springframework.beans.factory.BeanNameAware;
6061
import org.springframework.beans.factory.InitializingBean;
61-
import org.springframework.lang.Nullable;
6262
import org.springframework.util.Assert;
6363
import org.springframework.util.ClassUtils;
6464

spring-batch-core/src/main/java/org/springframework/batch/core/job/CompositeJobParametersValidator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
import java.util.List;
1919

2020
import org.springframework.batch.core.JobParameters;
21+
22+
import org.jspecify.annotations.Nullable;
2123
import org.springframework.batch.core.JobParametersInvalidException;
2224
import org.springframework.batch.core.JobParametersValidator;
2325
import org.springframework.beans.factory.InitializingBean;
24-
import org.springframework.lang.Nullable;
2526
import org.springframework.util.Assert;
2627

2728
/**

spring-batch-core/src/main/java/org/springframework/batch/core/job/DefaultJobParametersValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222

2323
import org.apache.commons.logging.Log;
2424
import org.apache.commons.logging.LogFactory;
25+
import org.jspecify.annotations.Nullable;
2526

2627
import org.springframework.batch.core.JobParameters;
2728
import org.springframework.batch.core.JobParametersInvalidException;
2829
import org.springframework.batch.core.JobParametersValidator;
2930
import org.springframework.beans.factory.InitializingBean;
30-
import org.springframework.lang.Nullable;
3131
import org.springframework.util.Assert;
3232

3333
/**

spring-batch-core/src/main/java/org/springframework/batch/core/job/builder/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.job.builder;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/FlowExecutor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
*/
1616
package org.springframework.batch.core.job.flow;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.core.JobExecution;
1921
import org.springframework.batch.core.JobInterruptedException;
2022
import org.springframework.batch.core.StartLimitExceededException;
2123
import org.springframework.batch.core.Step;
2224
import org.springframework.batch.core.StepExecution;
2325
import org.springframework.batch.core.repository.JobRestartException;
24-
import org.springframework.lang.Nullable;
2526

2627
/**
2728
* Context and execution strategy for {@link FlowJob} to allow it to delegate its

spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/JobExecutionDecider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
*/
1616
package org.springframework.batch.core.job.flow;
1717

18+
import org.jspecify.annotations.Nullable;
19+
1820
import org.springframework.batch.core.JobExecution;
1921
import org.springframework.batch.core.StepExecution;
20-
import org.springframework.lang.Nullable;
2122

2223
/**
2324
* Interface allowing for programmatic access to the decision on what the status of a flow

spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/JobFlowExecutor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.batch.core.job.flow;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.batch.core.BatchStatus;
2022
import org.springframework.batch.core.ExitStatus;
2123
import org.springframework.batch.core.JobExecution;
@@ -26,7 +28,6 @@
2628
import org.springframework.batch.core.job.StepHandler;
2729
import org.springframework.batch.core.repository.JobRepository;
2830
import org.springframework.batch.core.repository.JobRestartException;
29-
import org.springframework.lang.Nullable;
3031

3132
/**
3233
* Implementation of {@link FlowExecutor} for use in components that need to execute a

spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @author Michael Minella
55
* @author Mahmoud Ben Hassine
66
*/
7-
@NonNullApi
7+
@NullMarked
88
package org.springframework.batch.core.job.flow;
99

10-
import org.springframework.lang.NonNullApi;
10+
import org.jspecify.annotations.NullMarked;

spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/StateTransition.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
import org.springframework.batch.core.ExitStatus;
1919
import org.springframework.batch.core.job.flow.State;
2020
import org.springframework.batch.support.PatternMatcher;
21-
import org.springframework.lang.Nullable;
2221
import org.springframework.util.Assert;
2322
import org.springframework.util.StringUtils;
2423

2524
import java.util.Objects;
2625

26+
import org.jspecify.annotations.Nullable;
27+
2728
/**
2829
* Value object representing a potential transition from one {@link State} to another. The
2930
* originating State name and the next {@link State} to execute are linked by a pattern

0 commit comments

Comments
 (0)