Skip to content

Commit d0a428b

Browse files
committed
jspecify integration on s3 module
Signed-off-by: Andrea Cioni <[email protected]>
1 parent 9b5b346 commit d0a428b

File tree

15 files changed

+142
-5
lines changed

15 files changed

+142
-5
lines changed

spring-batch-s3/pom.xml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@
7272
<type>pom</type>
7373
<version>${aws.java.sdk.version}</version>
7474
</dependency>
75+
<dependency>
76+
<groupId>org.jspecify</groupId>
77+
<artifactId>jspecify</artifactId>
78+
<version>0.3.0</version>
79+
<scope>provided</scope>
80+
</dependency>
7581
</dependencies>
7682
</dependencyManagement>
7783

@@ -94,6 +100,11 @@
94100
<artifactId>spring-batch-core</artifactId>
95101
</dependency>
96102

103+
<dependency>
104+
<groupId>org.jspecify</groupId>
105+
<artifactId>jspecify</artifactId>
106+
</dependency>
107+
97108
<!-- Test -->
98109
<dependency>
99110
<groupId>org.assertj</groupId>
@@ -124,8 +135,31 @@
124135
<artifactId>maven-compiler-plugin</artifactId>
125136
<configuration>
126137
<compilerArgs>
127-
<arg>-Xlint:all,deprecation</arg>
138+
<compilerArg>-Xlint:all,-varargs</compilerArg>
139+
<!-- https://errorprone.info/docs/installation#maven -->
140+
<compilerArg>-XDcompilePolicy=simple</compilerArg>
141+
<compilerArg>--should-stop=ifError=FLOW</compilerArg>
142+
<compilerArg>
143+
-Xplugin:ErrorProne
144+
-XepDisableAllChecks
145+
<!-- Check JSpecify annotations -->
146+
-Xep:NullAway
147+
-XepOpt:NullAway:OnlyNullMarked
148+
-XepOpt:NullAway:SuppressionNameAliases=DataFlowIssue
149+
</compilerArg>
128150
</compilerArgs>
151+
<annotationProcessorPaths>
152+
<path>
153+
<groupId>com.google.errorprone</groupId>
154+
<artifactId>error_prone_core</artifactId>
155+
<version>2.43.0</version>
156+
</path>
157+
<path>
158+
<groupId>com.uber.nullaway</groupId>
159+
<artifactId>nullaway</artifactId>
160+
<version>0.12.11</version>
161+
</path>
162+
</annotationProcessorPaths>
129163
</configuration>
130164
</plugin>
131165
<plugin>

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/S3ItemReader.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.io.IOException;
2020
import java.util.Arrays;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
import org.springframework.batch.extensions.s3.serializer.S3Deserializer;
2325
import org.springframework.batch.extensions.s3.stream.S3InputStream;
2426
import org.springframework.batch.infrastructure.item.ItemReader;
@@ -49,6 +51,7 @@ public S3ItemReader(S3InputStream in, S3Deserializer<T> deserializer) {
4951
}
5052

5153
@Override
54+
@Nullable
5255
public T read() throws Exception {
5356
T item;
5457

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/builder/S3ItemReaderBuilder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,27 @@
1616

1717
package org.springframework.batch.extensions.s3.builder;
1818

19+
import org.jspecify.annotations.Nullable;
1920
import software.amazon.awssdk.services.s3.S3Client;
2021

2122
import org.springframework.batch.extensions.s3.S3ItemReader;
2223
import org.springframework.batch.extensions.s3.serializer.S3Deserializer;
2324
import org.springframework.batch.extensions.s3.stream.S3InputStream;
2425

2526
public class S3ItemReaderBuilder<T> {
27+
@Nullable
2628
private S3Client s3Client;
2729

30+
@Nullable
2831
private String bucketName;
2932

33+
@Nullable
3034
private String objectKey;
3135

36+
@Nullable
3237
private S3Deserializer<T> deserializer;
3338

39+
@Nullable
3440
private Integer bufferSize;
3541

3642
public S3ItemReaderBuilder<T> s3Client(S3Client s3Client) {

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/builder/S3ItemWriterBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.io.OutputStream;
2121

22+
import org.jspecify.annotations.Nullable;
2223
import software.amazon.awssdk.services.s3.S3Client;
2324

2425
import org.springframework.batch.extensions.s3.S3ItemWriter;
@@ -28,18 +29,24 @@
2829
import org.springframework.batch.extensions.s3.stream.S3OutputStream;
2930

3031
public class S3ItemWriterBuilder<T> {
32+
@Nullable
3133
private S3Client s3Client;
3234

35+
@Nullable
3336
private String bucket;
3437

38+
@Nullable
3539
private String key;
3640

41+
@Nullable
3742
private S3Serializer<T> serializer;
3843

3944
private boolean multipartUpload;
4045

46+
@Nullable
4147
private String contentType;
4248

49+
@Nullable
4350
private Integer partSize;
4451

4552
public S3ItemWriterBuilder<T> s3Client(S3Client s3Client) {

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/builder/package-info.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,7 @@
2424
* convenient way to read large datasets stored in S3 without loading them entirely into
2525
* memory.
2626
*/
27-
27+
@NullMarked
2828
package org.springframework.batch.extensions.s3.builder;
29+
30+
import org.jspecify.annotations.NullMarked;

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@
2525
* memory.
2626
*/
2727

28+
@NullMarked
2829
package org.springframework.batch.extensions.s3;
30+
31+
import org.jspecify.annotations.NullMarked;

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/serializer/S3Deserializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.batch.extensions.s3.serializer;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
/**
2022
* A functional interface for serializing items to byte arrays for S3 storage.
2123
* Implementations should provide a way to convert an item of type T into a byte array.
@@ -34,6 +36,7 @@ public interface S3Deserializer<T> {
3436
* @param buffer the byte array to deserialize
3537
* @return the deserialized object
3638
*/
39+
@Nullable
3740
T deserialize(byte[] buffer);
3841

3942
}

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/serializer/S3StringDeserializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.nio.charset.Charset;
2020
import java.nio.charset.StandardCharsets;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
/**
2325
* Simple deserializer for String items from S3. It reads lines from a byte array,
2426
* handling both \n and \r\n line endings.
@@ -41,6 +43,7 @@ public S3StringDeserializer(Charset charset) {
4143
}
4244

4345
@Override
46+
@Nullable
4447
public String deserialize(byte[] buffer) {
4548
String incoming = new String(buffer, this.charset);
4649
this.stringBuilder.append(incoming);

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/serializer/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,7 @@
2424
* convenient way to read large datasets stored in S3 without loading them entirely into
2525
* memory.
2626
*/
27+
@NullMarked
2728
package org.springframework.batch.extensions.s3.serializer;
29+
30+
import org.jspecify.annotations.NullMarked;

spring-batch-s3/src/main/java/org/springframework/batch/extensions/s3/stream/S3InputStream.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.io.InputStream;
2121

22+
import org.jspecify.annotations.Nullable;
2223
import org.slf4j.Logger;
2324
import org.slf4j.LoggerFactory;
2425
import software.amazon.awssdk.services.s3.S3Client;
@@ -41,6 +42,7 @@ public class S3InputStream extends InputStream {
4142

4243
private final String objectKey;
4344

45+
@Nullable
4446
private InputStream inputStream;
4547

4648
public S3InputStream(S3Client s3, String bucketName, String objectKey) {

0 commit comments

Comments
 (0)