Skip to content

Commit 8a57dcb

Browse files
committed
Add jspecify annotations
1 parent 34faede commit 8a57dcb

File tree

63 files changed

+733
-370
lines changed

Some content is hidden

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

63 files changed

+733
-370
lines changed

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
<docker-builder.image.name>s3mock-buildx</docker-builder.image.name>
100100
<docker-maven-plugin.version>0.46.0</docker-maven-plugin.version>
101101
<docker.image.name>adobe/s3mock</docker.image.name>
102-
102+
<jspecify.version>1.0.0</jspecify.version>
103103
<junit-jupiter.version>5.7.2</junit-jupiter.version>
104104
<junit.version>4.13.2</junit.version>
105105

@@ -311,6 +311,11 @@
311311
<artifactId>httpmime</artifactId>
312312
<version>${httpmime.version}</version>
313313
</dependency>
314+
<dependency>
315+
<groupId>org.jspecify</groupId>
316+
<artifactId>jspecify</artifactId>
317+
<version>${jspecify.version}</version>
318+
</dependency>
314319
<dependency>
315320
<groupId>org.mockito</groupId>
316321
<artifactId>mockito-core</artifactId>
@@ -607,6 +612,7 @@
607612
<version>${kotlin.version}</version>
608613
<extensions>true</extensions>
609614
<configuration>
615+
<javaParameters>true</javaParameters>
610616
<args>
611617
<arg>-Xjsr305=strict</arg> <!-- Enable strict mode for JSR-305 annotations -->
612618
</args>

server/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@
7979
<groupId>org.apache.commons</groupId>
8080
<artifactId>commons-lang3</artifactId>
8181
</dependency>
82+
<dependency>
83+
<groupId>org.jspecify</groupId>
84+
<artifactId>jspecify</artifactId>
85+
</dependency>
8286
<!-- Test Dependencies -->
8387
<dependency>
8488
<groupId>org.apache.httpcomponents</groupId>

server/src/main/java/com/adobe/testing/s3mock/BucketController.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.adobe.testing.s3mock.dto.VersioningConfiguration;
5858
import com.adobe.testing.s3mock.service.BucketService;
5959
import com.adobe.testing.s3mock.store.BucketMetadata;
60+
import org.jspecify.annotations.Nullable;
6061
import org.springframework.http.ResponseEntity;
6162
import org.springframework.stereotype.Controller;
6263
import org.springframework.web.bind.annotation.CrossOrigin;
@@ -138,7 +139,7 @@ public ResponseEntity<Void> createBucket(
138139
defaultValue = "false") boolean objectLockEnabled,
139140
@RequestHeader(value = X_AMZ_OBJECT_OWNERSHIP, required = false,
140141
defaultValue = "BucketOwnerEnforced") ObjectOwnership objectOwnership,
141-
@RequestBody(required = false) CreateBucketConfiguration createBucketRequest) {
142+
@RequestBody(required = false) @Nullable CreateBucketConfiguration createBucketRequest) {
142143
bucketService.verifyBucketNameIsAllowed(bucketName);
143144
bucketService.verifyBucketDoesNotExist(bucketName);
144145
bucketService.createBucket(bucketName,
@@ -369,9 +370,7 @@ public ResponseEntity<Void> deleteBucketLifecycleConfiguration(@PathVariable Str
369370
@S3Verified(year = 2025)
370371
public ResponseEntity<LocationConstraint> getBucketLocation(@PathVariable String bucketName) {
371372
BucketMetadata bucketMetadata = bucketService.verifyBucketExists(bucketName);
372-
String bucketRegion = bucketMetadata.bucketRegion() != null
373-
? bucketMetadata.bucketRegion()
374-
: region.toString();
373+
String bucketRegion = bucketMetadata.bucketRegion();
375374
return ResponseEntity.ok(new LocationConstraint(bucketRegion));
376375
}
377376

@@ -487,7 +486,7 @@ public ResponseEntity<ListVersionsResult> listObjectVersions(
487486
return ResponseEntity.ok(listVersionsResult);
488487
}
489488

490-
private String regionFrom(CreateBucketConfiguration createBucketRequest) {
489+
private String regionFrom(@Nullable CreateBucketConfiguration createBucketRequest) {
491490
if (createBucketRequest != null
492491
&& createBucketRequest.locationConstraint() != null
493492
&& createBucketRequest.locationConstraint().region() != null) {

server/src/main/java/com/adobe/testing/s3mock/ChecksumModeHeaderConverter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
package com.adobe.testing.s3mock;
1818

1919
import com.adobe.testing.s3mock.dto.ChecksumMode;
20-
import com.adobe.testing.s3mock.dto.ObjectOwnership;
2120
import com.adobe.testing.s3mock.util.AwsHttpHeaders;
21+
import org.jspecify.annotations.Nullable;
2222
import org.springframework.core.convert.converter.Converter;
23-
import org.springframework.lang.NonNull;
24-
import org.springframework.lang.Nullable;
2523

2624
/**
2725
* Converts values of the {@link AwsHttpHeaders#X_AMZ_CHECKSUM_MODE} which is sent by the Amazon
@@ -33,7 +31,7 @@ class ChecksumModeHeaderConverter implements Converter<String, ChecksumMode> {
3331

3432
@Override
3533
@Nullable
36-
public ChecksumMode convert(@NonNull String source) {
34+
public ChecksumMode convert(String source) {
3735
return ChecksumMode.fromValue(source);
3836
}
3937
}

server/src/main/java/com/adobe/testing/s3mock/HttpRangeHeaderConverter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2023 Adobe.
2+
* Copyright 2017-2025 Adobe.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,16 +16,15 @@
1616

1717
package com.adobe.testing.s3mock;
1818

19+
import org.jspecify.annotations.Nullable;
1920
import org.springframework.core.convert.converter.Converter;
2021
import org.springframework.http.HttpRange;
21-
import org.springframework.lang.NonNull;
22-
import org.springframework.lang.Nullable;
2322

2423
public class HttpRangeHeaderConverter implements Converter<String, HttpRange> {
2524

2625
@Override
2726
@Nullable
28-
public HttpRange convert(@NonNull String source) {
27+
public HttpRange convert(String source) {
2928
var httpRanges = HttpRange.parseRanges(source);
3029
if (!httpRanges.isEmpty()) {
3130
return httpRanges.get(0);

server/src/main/java/com/adobe/testing/s3mock/KmsValidationFilter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.slf4j.Logger;
3434
import org.slf4j.LoggerFactory;
3535
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
36-
import org.springframework.lang.NonNull;
3736
import org.springframework.web.filter.OncePerRequestFilter;
3837

3938
/**
@@ -62,9 +61,9 @@ class KmsValidationFilter extends OncePerRequestFilter {
6261
}
6362

6463
@Override
65-
protected void doFilterInternal(@NonNull HttpServletRequest request,
66-
@NonNull HttpServletResponse response,
67-
@NonNull FilterChain filterChain) throws ServletException, IOException {
64+
protected void doFilterInternal(HttpServletRequest request,
65+
HttpServletResponse response,
66+
FilterChain filterChain) throws ServletException, IOException {
6867
try {
6968
LOG.debug("Checking KMS key, if present.");
7069
var encryptionTypeHeader = request.getHeader(X_AMZ_SERVER_SIDE_ENCRYPTION);

server/src/main/java/com/adobe/testing/s3mock/MultipartController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import java.util.List;
7777
import org.apache.commons.io.FileUtils;
7878
import org.apache.commons.io.IOUtils;
79+
import org.jspecify.annotations.Nullable;
7980
import org.springframework.http.HttpHeaders;
8081
import org.springframework.http.HttpRange;
8182
import org.springframework.http.ResponseEntity;
@@ -345,9 +346,9 @@ public ResponseEntity<CopyPartResult> uploadPartCopy(
345346
public ResponseEntity<InitiateMultipartUploadResult> createMultipartUpload(
346347
@PathVariable String bucketName,
347348
@PathVariable ObjectKey key,
348-
@RequestHeader(value = CONTENT_TYPE, required = false) String contentType,
349-
@RequestHeader(value = X_AMZ_CHECKSUM_TYPE, required = false) ChecksumType checksumType,
350-
@RequestHeader(value = X_AMZ_TAGGING, required = false) List<Tag> tags,
349+
@RequestHeader(value = CONTENT_TYPE, required = false) @Nullable String contentType,
350+
@RequestHeader(value = X_AMZ_CHECKSUM_TYPE, required = false) @Nullable ChecksumType checksumType,
351+
@RequestHeader(value = X_AMZ_TAGGING, required = false) @Nullable List<Tag> tags,
351352
@RequestHeader(value = X_AMZ_STORAGE_CLASS, required = false, defaultValue = "STANDARD")
352353
StorageClass storageClass,
353354
@RequestHeader HttpHeaders httpHeaders,

server/src/main/java/com/adobe/testing/s3mock/ObjectCannedAclHeaderConverter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818

1919
import com.adobe.testing.s3mock.dto.ObjectCannedACL;
2020
import com.adobe.testing.s3mock.util.AwsHttpHeaders;
21+
import org.jspecify.annotations.Nullable;
2122
import org.springframework.core.convert.converter.Converter;
22-
import org.springframework.lang.NonNull;
23-
import org.springframework.lang.Nullable;
2423

2524
/**
2625
* Converts values of the {@link AwsHttpHeaders#X_AMZ_ACL} which is sent by the Amazon client.
@@ -32,7 +31,7 @@ class ObjectCannedAclHeaderConverter implements Converter<String, ObjectCannedAC
3231

3332
@Override
3433
@Nullable
35-
public ObjectCannedACL convert(@NonNull String source) {
34+
public ObjectCannedACL convert(String source) {
3635
return ObjectCannedACL.fromValue(source);
3736
}
3837
}

0 commit comments

Comments
 (0)