Skip to content

Commit fa96f27

Browse files
committed
Merge branch 'master' into h2
2 parents 74c602f + 3cf77a2 commit fa96f27

File tree

87 files changed

+2084
-1157
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

+2084
-1157
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Added Consumer<Builder>-style methods for vararg parameters."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Include root causes in the exception message from AWSCredentialsProviderChain to ease troubleshooting."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Renamed AsyncRequestProvider to AsyncRequestBody to better match sync's RequestBody"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Added Consumer<Builder>-style methods for all client overloads."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "AsyncResponseTransformer byte array and string methods now match the sync model."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Updating default retry policy to include newly added conditions."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "feature",
4+
"description": "Renamed AsyncResponseHandler to AsyncResponseTransformer and StreamingResponseHandler to ResponseTransformer."
5+
}

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

Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

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

18-
import java.util.Map;
19-
import software.amazon.awssdk.codegen.internal.ImmutableMapParameter;
2018
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2119
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
2220

@@ -27,20 +25,20 @@
2725
*/
2826
class AsyncOperationDocProvider extends OperationDocProvider {
2927

30-
private static final String REQUEST_PROVIDER_DOCS =
28+
private static final String REQUEST_BODY_DOCS =
3129
"Functional interface that can be implemented to produce the request content " +
3230
"in a non-blocking manner. The size of the content is expected to be known up front. " +
33-
"See {@link AsyncRequestProvider} for specific details on implementing this interface as well " +
31+
"See {@link AsyncRequestBody} for specific details on implementing this interface as well " +
3432
"as links to precanned implementations for common scenarios like uploading from a file. ";
3533

36-
private static final String STREAM_RESPONSE_HANDLER_DOCS =
37-
"The response handler for processing the streaming response in a " +
38-
"non-blocking manner. See {@link AsyncResponseHandler} for details on how this callback " +
34+
private static final String STREAM_RESPONSE_TRANSFORMER_DOCS =
35+
"The response transformer for processing the streaming response in a " +
36+
"non-blocking manner. See {@link AsyncResponseTransformer} for details on how this callback " +
3937
"should be implemented and for links to precanned implementations for common scenarios like " +
4038
"downloading to a file. ";
4139

42-
private AsyncOperationDocProvider(IntermediateModel model, OperationModel opModel) {
43-
super(model, opModel);
40+
AsyncOperationDocProvider(IntermediateModel model, OperationModel opModel, DocConfiguration configuration) {
41+
super(model, opModel, configuration);
4442
}
4543

4644
@Override
@@ -56,7 +54,7 @@ protected String getInterfaceName() {
5654
@Override
5755
protected void applyReturns(DocumentationBuilder docBuilder) {
5856
if (opModel.hasStreamingOutput()) {
59-
docBuilder.returns("A future to the transformed result of the AsyncResponseHandler.");
57+
docBuilder.returns("A future to the transformed result of the AsyncResponseTransformer.");
6058
} else {
6159
docBuilder.returns("A Java Future containing the result of the %s operation returned by the service.",
6260
opModel.getOperationName());
@@ -68,10 +66,10 @@ protected void applyReturns(DocumentationBuilder docBuilder) {
6866
protected void applyParams(DocumentationBuilder docBuilder) {
6967
emitRequestParm(docBuilder);
7068
if (opModel.hasStreamingInput()) {
71-
docBuilder.param("requestProvider", REQUEST_PROVIDER_DOCS + getStreamingInputDocs());
69+
docBuilder.param("requestBody", REQUEST_BODY_DOCS + getStreamingInputDocs());
7270
}
7371
if (opModel.hasStreamingOutput()) {
74-
docBuilder.param("asyncResponseHandler", STREAM_RESPONSE_HANDLER_DOCS + getStreamingOutputDocs());
72+
docBuilder.param("asyncResponseTransformer", STREAM_RESPONSE_TRANSFORMER_DOCS + getStreamingOutputDocs());
7573
}
7674
}
7775

@@ -80,30 +78,14 @@ protected void applyThrows(DocumentationBuilder docBuilder) {
8078
docBuilder.asyncThrows(getThrows());
8179
}
8280

83-
/**
84-
* Note that {@link SimpleMethodOverload#INPUT_STREAM} does not make sense for Async and is not generated.
85-
*
86-
* @return Factories to use for the {@link ClientType#ASYNC} method type.
87-
*/
88-
static Map<SimpleMethodOverload, Factory> asyncFactories() {
89-
return new ImmutableMapParameter.Builder<SimpleMethodOverload, Factory>()
90-
.put(SimpleMethodOverload.NORMAL, AsyncOperationDocProvider::new)
91-
.put(SimpleMethodOverload.NO_ARG, AsyncNoArg::new)
92-
.put(SimpleMethodOverload.FILE, AsyncFile::new)
93-
.put(SimpleMethodOverload.CONSUMER_BUILDER, AsyncConsumerBuilder::new)
94-
.put(SimpleMethodOverload.PAGINATED, AsyncPaginated::new)
95-
.put(SimpleMethodOverload.NO_ARG_PAGINATED, AsyncPaginatedNoArg::new)
96-
.build();
97-
}
98-
9981
/**
10082
* Provider for streaming simple methods that take a file (to either upload from for streaming inputs or download to for
10183
* streaming outputs).
10284
*/
103-
private static class AsyncFile extends AsyncOperationDocProvider {
85+
static class AsyncFile extends AsyncOperationDocProvider {
10486

105-
private AsyncFile(IntermediateModel model, OperationModel opModel) {
106-
super(model, opModel);
87+
AsyncFile(IntermediateModel model, OperationModel opModel, DocConfiguration configuration) {
88+
super(model, opModel, configuration);
10789
}
10890

10991
@Override
@@ -122,46 +104,24 @@ protected void applyParams(DocumentationBuilder docBuilder) {
122104
/**
123105
* Provider for simple method that takes no arguments and creates an empty request object.
124106
*/
125-
private static class AsyncNoArg extends AsyncOperationDocProvider {
107+
static class AsyncNoArg extends AsyncOperationDocProvider {
126108

127-
private AsyncNoArg(IntermediateModel model, OperationModel opModel) {
128-
super(model, opModel);
129-
}
130-
131-
@Override
132-
protected void applyParams(DocumentationBuilder docBuilder) {
133-
}
134-
}
135-
136-
private static class AsyncConsumerBuilder extends AsyncOperationDocProvider {
137-
private AsyncConsumerBuilder(IntermediateModel model, OperationModel opModel) {
138-
super(model, opModel);
139-
}
140-
141-
@Override
142-
protected String appendToDescription() {
143-
return "This is a convenience which creates an instance of the {@link " +
144-
opModel.getInput().getSimpleType() +
145-
".Builder} avoiding the need to create one manually via {@link " +
146-
opModel.getInput().getSimpleType() +
147-
"#builder()}";
109+
AsyncNoArg(IntermediateModel model, OperationModel opModel, DocConfiguration configuration) {
110+
super(model, opModel, configuration);
148111
}
149112

150113
@Override
151114
protected void applyParams(DocumentationBuilder docBuilder) {
152-
docBuilder.param(opModel.getInput().getVariableName(),
153-
"a {@link Consumer} that will call methods on {@link %s.Builder}.",
154-
opModel.getInputShape().getC2jName());
155115
}
156116
}
157117

158118
/**
159119
* Provider for traditional paginated method that takes in a request object and returns a response object.
160120
*/
161-
private static class AsyncPaginated extends AsyncOperationDocProvider {
121+
static class AsyncPaginated extends AsyncOperationDocProvider {
162122

163-
private AsyncPaginated(IntermediateModel model, OperationModel opModel) {
164-
super(model, opModel);
123+
AsyncPaginated(IntermediateModel model, OperationModel opModel, DocConfiguration configuration) {
124+
super(model, opModel, configuration);
165125
}
166126

167127
@Override
@@ -178,10 +138,10 @@ protected void applyReturns(DocumentationBuilder docBuilder) {
178138
/**
179139
* Provider for paginated simple method that takes no arguments and creates an empty request object.
180140
*/
181-
private static class AsyncPaginatedNoArg extends AsyncPaginated {
141+
static class AsyncPaginatedNoArg extends AsyncPaginated {
182142

183-
private AsyncPaginatedNoArg(IntermediateModel model, OperationModel opModel) {
184-
super(model, opModel);
143+
AsyncPaginatedNoArg(IntermediateModel model, OperationModel opModel, DocConfiguration configuration) {
144+
super(model, opModel, configuration);
185145
}
186146

187147
@Override
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright 2010-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.codegen.docs;
17+
18+
/**
19+
* Configuration for generation in a {@link OperationDocProvider}.
20+
*/
21+
public class DocConfiguration {
22+
/**
23+
* Whether the documentation should be generated for a consumer builder method.
24+
*/
25+
private boolean isConsumerBuilder = false;
26+
27+
public DocConfiguration isConsumerBuilder(boolean isConsumerBuilder) {
28+
this.isConsumerBuilder = isConsumerBuilder;
29+
return this;
30+
}
31+
32+
public boolean isConsumerBuilder() {
33+
return isConsumerBuilder;
34+
}
35+
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515

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

18-
import java.util.function.BiFunction;
1918
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2019
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
2120

2221
/**
23-
* Factory interface to reduce the verbosity of using BiFunction with type args everywhere.
22+
* Factory interface for creating an instance of {@link OperationDocProvider}.
2423
*/
2524
@FunctionalInterface
26-
interface Factory extends BiFunction<IntermediateModel, OperationModel, OperationDocProvider> {
25+
interface Factory {
26+
OperationDocProvider create(IntermediateModel model, OperationModel opModel, DocConfiguration config);
2727
}

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,13 @@ abstract class OperationDocProvider {
5151

5252
protected final IntermediateModel model;
5353
protected final OperationModel opModel;
54+
protected final DocConfiguration config;
5455
protected final PaginationDocs paginationDocs;
5556

56-
OperationDocProvider(IntermediateModel model, OperationModel opModel) {
57+
OperationDocProvider(IntermediateModel model, OperationModel opModel, DocConfiguration config) {
5758
this.model = model;
5859
this.opModel = opModel;
60+
this.config = config;
5961
this.paginationDocs = new PaginationDocs(model, opModel);
6062
}
6163

@@ -71,6 +73,10 @@ String getDocs() {
7173

7274
String appendedDescription = appendToDescription();
7375

76+
if (config.isConsumerBuilder()) {
77+
appendedDescription += getConsumerBuilderDocs();
78+
}
79+
7480
docBuilder.description(StringUtils.isNotBlank(appendedDescription) ?
7581
description + "<br/>" + appendedDescription :
7682
description);
@@ -110,6 +116,17 @@ final String getStreamingOutputDocs() {
110116
getStreamingMemberDocs(opModel.getOutputShape()));
111117
}
112118

119+
/**
120+
* @return Documentation describing the consumer-builder variant of a method.
121+
*/
122+
private String getConsumerBuilderDocs() {
123+
return "<p>This is a convenience which creates an instance of the {@link " +
124+
opModel.getInput().getSimpleType() +
125+
".Builder} avoiding the need to create one manually via {@link " +
126+
opModel.getInput().getSimpleType() +
127+
"#builder()}</p>";
128+
}
129+
113130
/**
114131
* Gets the member documentation (as defined in the C2J model) for the streaming member of a shape.
115132
*
@@ -151,7 +168,16 @@ final List<Pair<String, String>> getThrows() {
151168
* @param docBuilder {@link DocumentationBuilder} to emit param to.
152169
*/
153170
final void emitRequestParm(DocumentationBuilder docBuilder) {
154-
docBuilder.param(opModel.getInput().getVariableName(), stripHtmlTags(opModel.getInput().getDocumentation()));
171+
String parameterDocs = stripHtmlTags(opModel.getInput().getDocumentation());
172+
173+
if (config.isConsumerBuilder()) {
174+
docBuilder.param(opModel.getInput().getVariableName(),
175+
"A {@link Consumer} that will call methods on {@link %s.Builder} to create a request. %s",
176+
opModel.getInputShape().getC2jName(),
177+
parameterDocs);
178+
} else {
179+
docBuilder.param(opModel.getInput().getVariableName(), parameterDocs);
180+
}
155181
}
156182

157183
/**

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

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,8 @@
1515

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

18-
import static software.amazon.awssdk.codegen.docs.AsyncOperationDocProvider.asyncFactories;
19-
import static software.amazon.awssdk.codegen.docs.SyncOperationDocProvider.syncFactories;
20-
21-
import java.util.Map;
2218
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2319
import software.amazon.awssdk.codegen.model.intermediate.OperationModel;
24-
import software.amazon.awssdk.core.util.ImmutableMapParameter;
2520

2621
/**
2722
* Provides documentation for an operation method on the client interface. Use
@@ -31,11 +26,6 @@
3126
* convenience overload as defined in {@link SimpleMethodOverload}.
3227
*/
3328
public final class OperationDocs {
34-
35-
private static final Map<ClientType, Map<SimpleMethodOverload, Factory>> FACTORIES =
36-
ImmutableMapParameter.of(ClientType.SYNC, syncFactories(),
37-
ClientType.ASYNC, asyncFactories());
38-
3929
private OperationDocs() {
4030
}
4131

@@ -52,6 +42,17 @@ public static String getDocs(IntermediateModel model, OperationModel opModel, Cl
5242
return getDocs(model, opModel, clientType, SimpleMethodOverload.NORMAL);
5343
}
5444

45+
/**
46+
* Equivalent to calling
47+
* {@link #getDocs(IntermediateModel, OperationModel, ClientType, SimpleMethodOverload, DocConfiguration)} with a default
48+
* {@link DocConfiguration}
49+
*/
50+
public static String getDocs(IntermediateModel model, OperationModel opModel, ClientType clientType,
51+
SimpleMethodOverload simpleMethodOverload) {
52+
return getDocs(model, opModel, clientType, simpleMethodOverload, new DocConfiguration());
53+
}
54+
55+
5556
/**
5657
* Get documentation for a specific {@link SimpleMethodOverload}.
5758
*
@@ -62,7 +63,11 @@ public static String getDocs(IntermediateModel model, OperationModel opModel, Cl
6263
* @return Formatted Javadocs for operation method.
6364
*/
6465
public static String getDocs(IntermediateModel model, OperationModel opModel, ClientType clientType,
65-
SimpleMethodOverload simpleMethodOverload) {
66-
return FACTORIES.get(clientType).get(simpleMethodOverload).apply(model, opModel).getDocs();
66+
SimpleMethodOverload simpleMethodOverload, DocConfiguration docConfig) {
67+
switch (clientType) {
68+
case SYNC: return simpleMethodOverload.syncDocsProvider(model, opModel, docConfig).getDocs();
69+
case ASYNC: return simpleMethodOverload.asyncDocsProvider(model, opModel, docConfig).getDocs();
70+
default: throw new UnsupportedOperationException("Unknown client type: " + clientType);
71+
}
6772
}
6873
}

0 commit comments

Comments
 (0)