Skip to content

Commit 9cf0f19

Browse files
authored
Merge feature branch: move S3 CRT related classes to s3 module (#3210)
* Move S3 CRT related class out of s3-tranfer-manager module to s3 module
1 parent ecf680e commit 9cf0f19

File tree

87 files changed

+1147
-395
lines changed

Some content is hidden

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

87 files changed

+1147
-395
lines changed

codegen/src/main/java/software/amazon/awssdk/codegen/docs/AsyncOperationDocProvider.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
package software.amazon.awssdk.codegen.docs;
1717

18+
19+
import static software.amazon.awssdk.codegen.internal.Constant.ASYNC_STREAMING_INPUT_PARAM;
20+
import static software.amazon.awssdk.codegen.internal.Constant.ASYNC_STREAMING_OUTPUT_PARAM;
21+
1822
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
1923
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
2024

@@ -66,10 +70,10 @@ protected void applyReturns(DocumentationBuilder docBuilder) {
6670
protected void applyParams(DocumentationBuilder docBuilder) {
6771
emitRequestParm(docBuilder);
6872
if (opModel.hasStreamingInput()) {
69-
docBuilder.param("requestBody", REQUEST_BODY_DOCS + getStreamingInputDocs());
73+
docBuilder.param(ASYNC_STREAMING_INPUT_PARAM, REQUEST_BODY_DOCS + getStreamingInputDocs());
7074
}
7175
if (opModel.hasStreamingOutput()) {
72-
docBuilder.param("asyncResponseTransformer", STREAM_RESPONSE_TRANSFORMER_DOCS + getStreamingOutputDocs());
76+
docBuilder.param(ASYNC_STREAMING_OUTPUT_PARAM, STREAM_RESPONSE_TRANSFORMER_DOCS + getStreamingOutputDocs());
7377
}
7478
}
7579

codegen/src/main/java/software/amazon/awssdk/codegen/docs/PaginationDocs.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2525
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
2626
import software.amazon.awssdk.codegen.model.service.PaginatorDefinition;
27-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
27+
import software.amazon.awssdk.codegen.poet.PoetExtension;
2828
import software.amazon.awssdk.codegen.utils.PaginatorUtils;
2929
import software.amazon.awssdk.utils.async.SequentialSubscriber;
3030

@@ -33,13 +33,13 @@ public class PaginationDocs {
3333
private static final String SUBSCRIBE_METHOD_NAME = "subscribe";
3434

3535
private final OperationModel operationModel;
36-
private final PoetExtensions poetExtensions;
36+
private final PoetExtension poetExtensions;
3737
private final PaginatorDefinition paginatorDefinition;
3838

3939
public PaginationDocs(IntermediateModel intermediateModel, OperationModel operationModel,
4040
PaginatorDefinition paginatorDefinition) {
4141
this.operationModel = operationModel;
42-
this.poetExtensions = new PoetExtensions(intermediateModel);
42+
this.poetExtensions = new PoetExtension(intermediateModel);
4343
this.paginatorDefinition = paginatorDefinition;
4444
}
4545

codegen/src/main/java/software/amazon/awssdk/codegen/docs/SyncOperationDocProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import static software.amazon.awssdk.codegen.internal.Constant.SYNC_CLIENT_DESTINATION_PATH_PARAM_NAME;
1919
import static software.amazon.awssdk.codegen.internal.Constant.SYNC_CLIENT_SOURCE_PATH_PARAM_NAME;
20+
import static software.amazon.awssdk.codegen.internal.Constant.SYNC_STREAMING_INPUT_PARAM;
21+
import static software.amazon.awssdk.codegen.internal.Constant.SYNC_STREAMING_OUTPUT_PARAM;
2022

2123
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2224
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
@@ -76,11 +78,11 @@ protected void applyReturns(DocumentationBuilder docBuilder) {
7678
protected void applyParams(DocumentationBuilder docBuilder) {
7779
emitRequestParm(docBuilder);
7880
if (opModel.hasStreamingInput()) {
79-
docBuilder.param("requestBody", REQUEST_BODY_DOCS + getStreamingInputDocs());
81+
docBuilder.param(SYNC_STREAMING_INPUT_PARAM, REQUEST_BODY_DOCS + getStreamingInputDocs());
8082

8183
}
8284
if (opModel.hasStreamingOutput()) {
83-
docBuilder.param("responseTransformer", STREAM_RESPONSE_HANDLER_DOCS + getStreamingOutputDocs(),
85+
docBuilder.param(SYNC_STREAMING_OUTPUT_PARAM, STREAM_RESPONSE_HANDLER_DOCS + getStreamingOutputDocs(),
8486
opModel.getOutputShape().getShapeName(), getStreamingOutputDocs());
8587
}
8688
}

codegen/src/main/java/software/amazon/awssdk/codegen/emitters/GeneratorTaskParams.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.slf4j.LoggerFactory;
2121
import software.amazon.awssdk.codegen.emitters.tasks.SharedModelsTaskParamsValidator;
2222
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
23-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
23+
import software.amazon.awssdk.codegen.poet.PoetExtension;
2424

2525
/**
2626
* Parameters for generator tasks.
@@ -30,14 +30,14 @@ public class GeneratorTaskParams {
3030

3131
private final IntermediateModel model;
3232
private final GeneratorPathProvider pathProvider;
33-
private final PoetExtensions poetExtensions;
33+
private final PoetExtension poetExtensions;
3434
private final Logger log = LoggerFactory.getLogger(GeneratorTaskParams.class);
3535

3636
private GeneratorTaskParams(IntermediateModel model,
3737
GeneratorPathProvider pathProvider) {
3838
this.model = model;
3939
this.pathProvider = pathProvider;
40-
this.poetExtensions = new PoetExtensions(model);
40+
this.poetExtensions = new PoetExtension(model);
4141
}
4242

4343
public static GeneratorTaskParams create(IntermediateModel model, String sourceDirectory, String testDirectory) {
@@ -64,7 +64,7 @@ public GeneratorPathProvider getPathProvider() {
6464
/**
6565
* @return Extensions and convenience methods for Java Poet.
6666
*/
67-
public PoetExtensions getPoetExtensions() {
67+
public PoetExtension getPoetExtensions() {
6868
return poetExtensions;
6969
}
7070

codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AsyncClientGeneratorTasks.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import software.amazon.awssdk.codegen.poet.builder.AsyncClientBuilderInterface;
2525
import software.amazon.awssdk.codegen.poet.client.AsyncClientClass;
2626
import software.amazon.awssdk.codegen.poet.client.AsyncClientInterface;
27+
import software.amazon.awssdk.codegen.poet.client.DelegatingAsyncClientClass;
2728
import software.amazon.awssdk.codegen.poet.endpointdiscovery.EndpointDiscoveryAsyncCacheLoaderGenerator;
2829

2930
public class AsyncClientGeneratorTasks extends BaseGeneratorTasks {
@@ -46,13 +47,21 @@ protected List<GeneratorTask> createTasks() throws Exception {
4647
generatorTasks.add(createEndpointDiscoveryCacheLoaderTask());
4748
}
4849

50+
if (model.getCustomizationConfig().isDelegateAsyncClientClass()) {
51+
generatorTasks.add(createDecoratorClientClassTask());
52+
}
53+
4954
return generatorTasks;
5055
}
5156

5257
private GeneratorTask createClientClassTask() throws IOException {
5358
return createPoetGeneratorTask(new AsyncClientClass(generatorTaskParams));
5459
}
5560

61+
private GeneratorTask createDecoratorClientClassTask() throws IOException {
62+
return createPoetGeneratorTask(new DelegatingAsyncClientClass(model));
63+
}
64+
5665
private GeneratorTask createClientBuilderTask() throws IOException {
5766
return createPoetGeneratorTask(new AsyncClientBuilderClass(model));
5867
}

codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ public final class Constant {
9292

9393
public static final String APPROVED_SIMPLE_METHOD_VERBS = "(get|list|describe|lookup|batchGet).*";
9494

95+
public static final String ASYNC_STREAMING_INPUT_PARAM = "requestBody";
96+
public static final String ASYNC_STREAMING_OUTPUT_PARAM = "asyncResponseTransformer";
97+
public static final String SYNC_STREAMING_INPUT_PARAM = "requestBody";
98+
public static final String SYNC_STREAMING_OUTPUT_PARAM = "responseTransformer";
99+
public static final String EVENT_PUBLISHER_PARAM_NAME = "requestStream";
100+
public static final String EVENT_RESPONSE_HANDLER_PARAM_NAME = "asyncResponseHandler";
101+
95102
private Constant() {
96103
}
97104
}

codegen/src/main/java/software/amazon/awssdk/codegen/model/config/customization/CustomizationConfig.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,10 @@ public class CustomizationConfig {
196196

197197
private RetryMode defaultRetryMode;
198198

199-
199+
/**
200+
* Whether to generate an abstract decorator class that delegates to the async service client
201+
*/
202+
private boolean delegateAsyncClientClass;
200203

201204
private CustomizationConfig() {
202205
}
@@ -502,4 +505,12 @@ public ServiceConfig getServiceConfig() {
502505
public void setServiceConfig(ServiceConfig serviceConfig) {
503506
this.serviceConfig = serviceConfig;
504507
}
508+
509+
public boolean isDelegateAsyncClientClass() {
510+
return delegateAsyncClientClass;
511+
}
512+
513+
public void setDelegateAsyncClientClass(boolean delegateAsyncClientClass) {
514+
this.delegateAsyncClientClass = delegateAsyncClientClass;
515+
}
505516
}

codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/Metadata.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,4 +678,8 @@ public String getFullWaitersPackageName() {
678678
public String getFullWaitersInternalPackageName() {
679679
return joinPackageNames(getFullWaitersPackageName(), "internal");
680680
}
681+
682+
public String getFullInternalPackageName() {
683+
return joinPackageNames(getFullClientPackageName(), "internal");
684+
}
681685
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/PoetExtensions.java renamed to codegen/src/main/java/software/amazon/awssdk/codegen/poet/PoetExtension.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
/**
2626
* Extension and convenience methods to Poet that use the intermediate model.
2727
*/
28-
public class PoetExtensions {
28+
public class PoetExtension {
2929

3030
private final IntermediateModel model;
3131

32-
public PoetExtensions(IntermediateModel model) {
32+
public PoetExtension(IntermediateModel model) {
3333
this.model = model;
3434
}
3535

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static javax.lang.model.element.Modifier.FINAL;
2121
import static javax.lang.model.element.Modifier.PRIVATE;
2222
import static javax.lang.model.element.Modifier.STATIC;
23+
import static software.amazon.awssdk.codegen.internal.Constant.EVENT_PUBLISHER_PARAM_NAME;
2324
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.addS3ArnableFieldCode;
2425
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.applyPaginatorUserAgentMethod;
2526
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.applySignerOverrideMethod;
@@ -58,7 +59,7 @@
5859
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
5960
import software.amazon.awssdk.codegen.model.intermediate.ShapeModel;
6061
import software.amazon.awssdk.codegen.model.service.AuthType;
61-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
62+
import software.amazon.awssdk.codegen.poet.PoetExtension;
6263
import software.amazon.awssdk.codegen.poet.PoetUtils;
6364
import software.amazon.awssdk.codegen.poet.StaticImport;
6465
import software.amazon.awssdk.codegen.poet.client.specs.ProtocolSpec;
@@ -85,7 +86,7 @@
8586

8687
public final class AsyncClientClass extends AsyncClientInterface {
8788
private final IntermediateModel model;
88-
private final PoetExtensions poetExtensions;
89+
private final PoetExtension poetExtensions;
8990
private final ClassName className;
9091
private final ProtocolSpec protocolSpec;
9192

@@ -420,7 +421,8 @@ private TypeName eventStreamType(ShapeModel shapeModel) {
420421
return poetExtensions.getModelClass(shapeModel.getShapeName());
421422
}
422423

423-
private MethodSpec utilitiesMethod() {
424+
@Override
425+
protected MethodSpec utilitiesMethod() {
424426
UtilitiesMethod config = model.getCustomizationConfig().getUtilitiesMethod();
425427
ClassName returnType = PoetUtils.classNameFromFqcn(config.getReturnType());
426428
String instanceClass = config.getInstanceType();

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientInterface.java

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
package software.amazon.awssdk.codegen.poet.client;
1717

1818
import static java.util.stream.Collectors.toList;
19+
import static software.amazon.awssdk.codegen.internal.Constant.ASYNC_STREAMING_INPUT_PARAM;
20+
import static software.amazon.awssdk.codegen.internal.Constant.EVENT_PUBLISHER_PARAM_NAME;
21+
import static software.amazon.awssdk.codegen.internal.Constant.EVENT_RESPONSE_HANDLER_PARAM_NAME;
1922

2023
import com.squareup.javapoet.ClassName;
2124
import com.squareup.javapoet.FieldSpec;
@@ -43,7 +46,7 @@
4346
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
4447
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
4548
import software.amazon.awssdk.codegen.poet.ClassSpec;
46-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
49+
import software.amazon.awssdk.codegen.poet.PoetExtension;
4750
import software.amazon.awssdk.codegen.poet.PoetUtils;
4851
import software.amazon.awssdk.codegen.poet.eventstream.EventStreamUtils;
4952
import software.amazon.awssdk.codegen.poet.model.DeprecationUtils;
@@ -57,21 +60,20 @@
5760
public class AsyncClientInterface implements ClassSpec {
5861

5962
public static final TypeVariableName STREAMING_TYPE_VARIABLE = TypeVariableName.get("ReturnT");
60-
protected static final String EVENT_PUBLISHER_PARAM_NAME = "requestStream";
6163

6264
protected final IntermediateModel model;
6365
protected final ClassName className;
6466
protected final String clientPackageName;
6567
private final String modelPackage;
66-
private final PoetExtensions poetExtensions;
68+
private final PoetExtension poetExtensions;
6769

6870
public AsyncClientInterface(IntermediateModel model) {
6971
this.modelPackage = model.getMetadata().getFullModelPackageName();
7072
this.clientPackageName = model.getMetadata().getFullClientPackageName();
7173
this.model = model;
7274
this.className = ClassName.get(model.getMetadata().getFullClientPackageName(),
7375
model.getMetadata().getAsyncInterface());
74-
this.poetExtensions = new PoetExtensions(model);
76+
this.poetExtensions = new PoetExtension(model);
7577
}
7678

7779
@Override
@@ -304,7 +306,7 @@ private MethodSpec traditionalMethod(OperationModel opModel) {
304306
.addJavadoc(opModel.getDocs(model, ClientType.ASYNC));
305307

306308
if (opModel.hasStreamingInput()) {
307-
builder.addParameter(ClassName.get(AsyncRequestBody.class), "requestBody");
309+
builder.addParameter(ClassName.get(AsyncRequestBody.class), ASYNC_STREAMING_INPUT_PARAM);
308310
} else if (opModel.hasEventStreamInput()) {
309311
String eventStreamShapeName = EventStreamUtils.getEventStreamInRequest(opModel.getInputShape())
310312
.getShapeName();
@@ -319,7 +321,7 @@ private MethodSpec traditionalMethod(OperationModel opModel) {
319321
.get(ClassName.get(AsyncResponseTransformer.class), responsePojoType, STREAMING_TYPE_VARIABLE);
320322
builder.addParameter(asyncResponseHandlerType, "asyncResponseTransformer");
321323
} else if (opModel.hasEventStreamOutput()) {
322-
builder.addParameter(poetExtensions.eventStreamResponseHandlerType(opModel), "asyncResponseHandler");
324+
builder.addParameter(poetExtensions.eventStreamResponseHandlerType(opModel), EVENT_RESPONSE_HANDLER_PARAM_NAME);
323325
}
324326
return operationBody(builder, opModel).build();
325327
}
@@ -448,26 +450,34 @@ private String consumerBuilderJavadoc(OperationModel opModel, SimpleMethodOverlo
448450
return opModel.getDocs(model, ClientType.ASYNC, overload, new DocConfiguration().isConsumerBuilder(true));
449451
}
450452

451-
private MethodSpec utilitiesMethod() {
453+
protected MethodSpec utilitiesMethod() {
452454
UtilitiesMethod config = model.getCustomizationConfig().getUtilitiesMethod();
453455
ClassName returnType = PoetUtils.classNameFromFqcn(config.getReturnType());
454456

455-
return MethodSpec.methodBuilder(UtilitiesMethod.METHOD_NAME)
456-
.returns(returnType)
457-
.addModifiers(Modifier.PUBLIC)
458-
.addModifiers(Modifier.DEFAULT)
459-
.addStatement("throw new $T()", UnsupportedOperationException.class)
460-
.addJavadoc("Creates an instance of {@link $T} object with the "
461-
+ "configuration set on this client.", returnType)
462-
.build();
457+
MethodSpec.Builder builder = MethodSpec.methodBuilder(UtilitiesMethod.METHOD_NAME)
458+
.returns(returnType)
459+
.addModifiers(Modifier.PUBLIC)
460+
.addJavadoc("Creates an instance of {@link $T} object with the "
461+
+ "configuration set on this client.", returnType);
462+
return utilitiesOperationBody(builder).build();
463463
}
464464

465-
private MethodSpec waiterMethod() {
466-
return MethodSpec.methodBuilder("waiter")
467-
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
468-
.returns(poetExtensions.getAsyncWaiterInterface())
469-
.addStatement("throw new $T()", UnsupportedOperationException.class)
470-
.addJavadoc(WaiterDocs.waiterMethodInClient(poetExtensions.getAsyncWaiterInterface()))
471-
.build();
465+
protected MethodSpec.Builder utilitiesOperationBody(MethodSpec.Builder builder) {
466+
return builder.addModifiers(Modifier.DEFAULT).addStatement("throw new $T()", UnsupportedOperationException.class);
467+
}
468+
469+
protected MethodSpec waiterMethod() {
470+
MethodSpec.Builder builder = MethodSpec.methodBuilder("waiter")
471+
.addModifiers(Modifier.PUBLIC)
472+
.returns(poetExtensions.getAsyncWaiterInterface())
473+
.addJavadoc(WaiterDocs.waiterMethodInClient(
474+
poetExtensions.getAsyncWaiterInterface()));
475+
476+
return waiterOperationBody(builder).build();
477+
}
478+
479+
protected MethodSpec.Builder waiterOperationBody(MethodSpec.Builder builder) {
480+
return builder.addModifiers(Modifier.DEFAULT, Modifier.PUBLIC)
481+
.addStatement("throw new $T()", UnsupportedOperationException.class);
472482
}
473483
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/ClientClassUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
3939
import software.amazon.awssdk.codegen.model.intermediate.ShapeModel;
4040
import software.amazon.awssdk.codegen.model.service.HostPrefixProcessor;
41-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
41+
import software.amazon.awssdk.codegen.poet.PoetExtension;
4242
import software.amazon.awssdk.codegen.poet.PoetUtils;
4343
import software.amazon.awssdk.core.ApiName;
4444
import software.amazon.awssdk.core.signer.Signer;
@@ -85,7 +85,7 @@ static MethodSpec consumerBuilderVariant(MethodSpec spec, String javadoc) {
8585
return result.build();
8686
}
8787

88-
static MethodSpec applyPaginatorUserAgentMethod(PoetExtensions poetExtensions, IntermediateModel model) {
88+
static MethodSpec applyPaginatorUserAgentMethod(PoetExtension poetExtensions, IntermediateModel model) {
8989

9090
TypeVariableName typeVariableName =
9191
TypeVariableName.get("T", poetExtensions.getModelClass(model.getSdkRequestBaseClassName()));
@@ -119,7 +119,7 @@ static MethodSpec applyPaginatorUserAgentMethod(PoetExtensions poetExtensions, I
119119
.build();
120120
}
121121

122-
static MethodSpec applySignerOverrideMethod(PoetExtensions poetExtensions, IntermediateModel model) {
122+
static MethodSpec applySignerOverrideMethod(PoetExtension poetExtensions, IntermediateModel model) {
123123
String signerOverrideVariable = "signerOverride";
124124

125125
TypeVariableName typeVariableName =

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/ClientSimpleMethodsIntegrationTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@
2424
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2525
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
2626
import software.amazon.awssdk.codegen.poet.ClassSpec;
27-
import software.amazon.awssdk.codegen.poet.PoetExtensions;
27+
import software.amazon.awssdk.codegen.poet.PoetExtension;
2828
import software.amazon.awssdk.codegen.poet.PoetUtils;
2929
import software.amazon.awssdk.regions.Region;
3030

3131
public class ClientSimpleMethodsIntegrationTests implements ClassSpec {
3232

3333
private final IntermediateModel model;
34-
private final PoetExtensions poetExtensions;
34+
private final PoetExtension poetExtensions;
3535

3636
public ClientSimpleMethodsIntegrationTests(IntermediateModel model) {
3737
this.model = model;
38-
this.poetExtensions = new PoetExtensions(model);
38+
this.poetExtensions = new PoetExtension(model);
3939
}
4040

4141
@Override

0 commit comments

Comments
 (0)