diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/waiters/BaseWaiterInterfaceSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/waiters/BaseWaiterInterfaceSpec.java index 2fc232214739..de21b0831afe 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/waiters/BaseWaiterInterfaceSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/waiters/BaseWaiterInterfaceSpec.java @@ -28,7 +28,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import javax.lang.model.element.Modifier; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.codegen.docs.WaiterDocs; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.model.intermediate.OperationModel; @@ -57,6 +59,8 @@ public BaseWaiterInterfaceSpec(IntermediateModel model) { public TypeSpec poetSpec() { TypeSpec.Builder result = PoetUtils.createInterfaceBuilder(className()); result.addAnnotation(SdkPublicApi.class); + result.addAnnotation(ThreadSafe.class); + result.addAnnotation(Immutable.class); result.addMethods(waiterOperations()); result.addSuperinterface(SdkAutoCloseable.class); result.addMethod(MethodSpec.methodBuilder("builder") diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-async-waiter-interface.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-async-waiter-interface.java index 67c242af48cb..8897444b4d5c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-async-waiter-interface.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-async-waiter-interface.java @@ -4,7 +4,9 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.function.Consumer; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration; import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.services.query.QueryAsyncClient; @@ -18,6 +20,8 @@ */ @Generated("software.amazon.awssdk:codegen") @SdkPublicApi +@ThreadSafe +@Immutable public interface QueryAsyncWaiter extends SdkAutoCloseable { /** * Polls {@link QueryAsyncClient#aPostOperation} API until the desired condition {@code PostOperationSuccess} is @@ -30,7 +34,7 @@ public interface QueryAsyncWaiter extends SdkAutoCloseable { * desired state. */ default CompletableFuture> waitUntilPostOperationSuccess( - APostOperationRequest aPostOperationRequest) { + APostOperationRequest aPostOperationRequest) { throw new UnsupportedOperationException(); } @@ -47,7 +51,7 @@ default CompletableFuture> waitUntilPostO * with the waiter success condition */ default CompletableFuture> waitUntilPostOperationSuccess( - Consumer aPostOperationRequest) { + Consumer aPostOperationRequest) { return waitUntilPostOperationSuccess(APostOperationRequest.builder().applyMutation(aPostOperationRequest).build()); } @@ -63,7 +67,7 @@ default CompletableFuture> waitUntilPostO * condition */ default CompletableFuture> waitUntilPostOperationSuccess( - APostOperationRequest aPostOperationRequest, WaiterOverrideConfiguration overrideConfig) { + APostOperationRequest aPostOperationRequest, WaiterOverrideConfiguration overrideConfig) { throw new UnsupportedOperationException(); } @@ -82,10 +86,10 @@ default CompletableFuture> waitUntilPostO * condition */ default CompletableFuture> waitUntilPostOperationSuccess( - Consumer aPostOperationRequest, - Consumer overrideConfig) { + Consumer aPostOperationRequest, + Consumer overrideConfig) { return waitUntilPostOperationSuccess(APostOperationRequest.builder().applyMutation(aPostOperationRequest).build(), - WaiterOverrideConfiguration.builder().applyMutation(overrideConfig).build()); + WaiterOverrideConfiguration.builder().applyMutation(overrideConfig).build()); } /** diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-sync-waiter-interface.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-sync-waiter-interface.java index 2f9fc13c16a0..0eeebabd31f0 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-sync-waiter-interface.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/waiters/query-sync-waiter-interface.java @@ -2,7 +2,9 @@ import java.util.function.Consumer; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.core.waiters.WaiterOverrideConfiguration; import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.services.query.QueryClient; @@ -16,6 +18,8 @@ */ @Generated("software.amazon.awssdk:codegen") @SdkPublicApi +@ThreadSafe +@Immutable public interface QueryWaiter extends SdkAutoCloseable { /** * Polls {@link QueryClient#aPostOperation} API until the desired condition {@code PostOperationSuccess} is met, or @@ -43,7 +47,7 @@ default WaiterResponse waitUntilPostOperationSuccess(APo * condition */ default WaiterResponse waitUntilPostOperationSuccess( - Consumer aPostOperationRequest) { + Consumer aPostOperationRequest) { return waitUntilPostOperationSuccess(APostOperationRequest.builder().applyMutation(aPostOperationRequest).build()); } @@ -59,7 +63,7 @@ default WaiterResponse waitUntilPostOperationSuccess( * condition */ default WaiterResponse waitUntilPostOperationSuccess(APostOperationRequest aPostOperationRequest, - WaiterOverrideConfiguration overrideConfig) { + WaiterOverrideConfiguration overrideConfig) { throw new UnsupportedOperationException(); } @@ -78,10 +82,10 @@ default WaiterResponse waitUntilPostOperationSuccess(APo * condition */ default WaiterResponse waitUntilPostOperationSuccess( - Consumer aPostOperationRequest, - Consumer overrideConfig) { + Consumer aPostOperationRequest, + Consumer overrideConfig) { return waitUntilPostOperationSuccess(APostOperationRequest.builder().applyMutation(aPostOperationRequest).build(), - WaiterOverrideConfiguration.builder().applyMutation(overrideConfig).build()); + WaiterOverrideConfiguration.builder().applyMutation(overrideConfig).build()); } /** diff --git a/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java b/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java index a5a1be6f38b2..d551058e6e3a 100644 --- a/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java +++ b/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataAsyncClient.java @@ -18,7 +18,9 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.core.exception.SdkClientException; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; import software.amazon.awssdk.imds.internal.DefaultEc2MetadataAsyncClient; @@ -56,6 +58,8 @@ *
Note: A single client instance should be reused for multiple requests when possible. */ @SdkPublicApi +@ThreadSafe +@Immutable public interface Ec2MetadataAsyncClient extends SdkAutoCloseable { /** diff --git a/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClient.java b/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClient.java index f5f5fcb9a154..994c1d8eb241 100644 --- a/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClient.java +++ b/core/imds/src/main/java/software/amazon/awssdk/imds/Ec2MetadataClient.java @@ -15,7 +15,9 @@ package software.amazon.awssdk.imds; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.core.exception.SdkClientException; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.imds.internal.DefaultEc2MetadataClient; @@ -54,6 +56,8 @@ *
Note: A single client instance should be reused for multiple requests when possible. */ @SdkPublicApi +@ThreadSafe +@Immutable public interface Ec2MetadataClient extends SdkAutoCloseable { /** diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java index 0490fa56ac33..2267d11e253f 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; @@ -45,6 +46,7 @@ */ @SdkPublicApi @ThreadSafe +@Immutable public interface DynamoDbEnhancedAsyncClient extends DynamoDbEnhancedResource { /** diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java index 5c2448a985d7..484bd4fbb3a2 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; @@ -45,6 +46,7 @@ */ @SdkPublicApi @ThreadSafe +@Immutable public interface DynamoDbEnhancedClient extends DynamoDbEnhancedResource { /** diff --git a/services-custom/iam-policy-builder/src/main/java/software/amazon/awssdk/policybuilder/iam/IamPolicy.java b/services-custom/iam-policy-builder/src/main/java/software/amazon/awssdk/policybuilder/iam/IamPolicy.java index fd28e616881d..e5ec4b2da353 100644 --- a/services-custom/iam-policy-builder/src/main/java/software/amazon/awssdk/policybuilder/iam/IamPolicy.java +++ b/services-custom/iam-policy-builder/src/main/java/software/amazon/awssdk/policybuilder/iam/IamPolicy.java @@ -18,6 +18,7 @@ import java.util.Collection; import java.util.List; import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.policybuilder.iam.internal.DefaultIamPolicy; @@ -99,6 +100,7 @@ */ @SdkPublicApi @ThreadSafe +@Immutable public interface IamPolicy extends ToCopyableBuilder { /** * Create an {@code IamPolicy} from an IAM policy in JSON form. diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java index a44c592c6a01..6175e2004247 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java @@ -31,6 +31,7 @@ import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.awscore.AwsExecutionAttribute; import software.amazon.awssdk.awscore.client.config.AwsClientOption; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; @@ -98,6 +99,7 @@ */ @Immutable @SdkPublicApi +@ThreadSafe public final class S3Utilities { private static final String SERVICE_NAME = "s3"; private static final Pattern ENDPOINT_PATTERN = Pattern.compile("^(.+\\.)?s3[.-]([a-z0-9-]+)\\.");