Skip to content

Commit 26e3b2d

Browse files
Consistently use BuilderRef for collections
This updates every map, set, or list in a builder to use BuilderRef. BuilderRef exists to minimize the number of copies we have to do as well as to make it harder to forget to make immutable copies of collections. In a few cases the underlying collection was changed to preserve or enforce order.
1 parent 9b024ef commit 26e3b2d

45 files changed

Lines changed: 519 additions & 504 deletions

File tree

Some content is hidden

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

smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/AuthorizersTrait.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package software.amazon.smithy.aws.apigateway.traits;
66

77
import java.util.Comparator;
8-
import java.util.HashMap;
98
import java.util.Map;
109
import java.util.Objects;
1110
import java.util.Optional;
@@ -16,7 +15,7 @@
1615
import software.amazon.smithy.model.traits.AbstractTrait;
1716
import software.amazon.smithy.model.traits.AbstractTraitBuilder;
1817
import software.amazon.smithy.model.traits.Trait;
19-
import software.amazon.smithy.utils.MapUtils;
18+
import software.amazon.smithy.utils.BuilderRef;
2019
import software.amazon.smithy.utils.ToSmithyBuilder;
2120

2221
/**
@@ -40,7 +39,7 @@ public final class AuthorizersTrait extends AbstractTrait implements ToSmithyBui
4039

4140
private AuthorizersTrait(Builder builder) {
4241
super(ID, builder.getSourceLocation());
43-
authorizers = MapUtils.copyOf(builder.authorizers);
42+
authorizers = builder.authorizers.copy();
4443
}
4544

4645
public static final class Provider extends AbstractTrait.Provider {
@@ -110,7 +109,7 @@ protected Node createNode() {
110109
* Builds an {@link AuthorizersTrait}.
111110
*/
112111
public static final class Builder extends AbstractTraitBuilder<AuthorizersTrait, Builder> {
113-
private final Map<String, AuthorizerDefinition> authorizers = new HashMap<>();
112+
private final BuilderRef<Map<String, AuthorizerDefinition>> authorizers = BuilderRef.forOrderedMap();
114113

115114
@Override
116115
public AuthorizersTrait build() {
@@ -125,7 +124,7 @@ public AuthorizersTrait build() {
125124
* @return Returns the builder.
126125
*/
127126
public Builder putAuthorizer(String name, AuthorizerDefinition authorizer) {
128-
authorizers.put(name, Objects.requireNonNull(authorizer));
127+
authorizers.get().put(name, Objects.requireNonNull(authorizer));
129128
return this;
130129
}
131130

@@ -148,7 +147,7 @@ public Builder authorizers(Map<String, AuthorizerDefinition> authorizers) {
148147
* @return Returns the builder.
149148
*/
150149
public Builder removeAuthorizer(String name) {
151-
authorizers.remove(name);
150+
authorizers.get().remove(name);
152151
return this;
153152
}
154153

smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/IntegrationResponse.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
*/
55
package software.amazon.smithy.aws.apigateway.traits;
66

7-
import java.util.HashMap;
87
import java.util.Map;
98
import java.util.Optional;
109
import software.amazon.smithy.model.FromSourceLocation;
1110
import software.amazon.smithy.model.node.Node;
1211
import software.amazon.smithy.model.node.NodeMapper;
1312
import software.amazon.smithy.model.node.ToNode;
14-
import software.amazon.smithy.utils.MapUtils;
13+
import software.amazon.smithy.utils.BuilderRef;
1514
import software.amazon.smithy.utils.SmithyBuilder;
1615
import software.amazon.smithy.utils.ToSmithyBuilder;
1716

@@ -31,8 +30,8 @@ public final class IntegrationResponse implements ToNode, ToSmithyBuilder<Integr
3130
private IntegrationResponse(Builder builder) {
3231
statusCode = SmithyBuilder.requiredState("statusCode", builder.statusCode);
3332
contentHandling = builder.contentHandling;
34-
responseTemplates = MapUtils.copyOf(builder.responseTemplates);
35-
responseParameters = MapUtils.copyOf(builder.responseParameters);
33+
responseTemplates = builder.responseTemplates.copy();
34+
responseParameters = builder.responseParameters.copy();
3635
sourceLocation = builder.sourceLocation;
3736
}
3837

@@ -151,8 +150,8 @@ public int hashCode() {
151150
public static final class Builder implements SmithyBuilder<IntegrationResponse> {
152151
private String statusCode;
153152
private String contentHandling;
154-
private Map<String, String> responseTemplates = new HashMap<>();
155-
private Map<String, String> responseParameters = new HashMap<>();
153+
private final BuilderRef<Map<String, String>> responseTemplates = BuilderRef.forSortedMap();
154+
private final BuilderRef<Map<String, String>> responseParameters = BuilderRef.forSortedMap();
156155
private FromSourceLocation sourceLocation;
157156

158157
@Override
@@ -193,7 +192,7 @@ public Builder contentHandling(String contentHandling) {
193192
*/
194193
public Builder responseTemplates(Map<String, String> responseTemplates) {
195194
this.responseTemplates.clear();
196-
this.responseTemplates.putAll(responseTemplates);
195+
responseTemplates.forEach(this::putResponseTemplate);
197196
return this;
198197
}
199198

@@ -206,7 +205,7 @@ public Builder responseTemplates(Map<String, String> responseTemplates) {
206205
* @see IntegrationResponse#getResponseTemplates()
207206
*/
208207
public Builder putResponseTemplate(String mimeType, String template) {
209-
responseTemplates.put(mimeType, template);
208+
responseTemplates.get().put(mimeType, template);
210209
return this;
211210
}
212211

@@ -217,7 +216,7 @@ public Builder putResponseTemplate(String mimeType, String template) {
217216
* @return Returns the builder.
218217
*/
219218
public Builder removeResponseTemplate(String mimeType) {
220-
responseTemplates.remove(mimeType);
219+
responseTemplates.get().remove(mimeType);
221220
return this;
222221
}
223222

@@ -230,7 +229,7 @@ public Builder removeResponseTemplate(String mimeType) {
230229
*/
231230
public Builder responseParameters(Map<String, String> responseParameters) {
232231
this.responseParameters.clear();
233-
this.responseParameters.putAll(responseParameters);
232+
responseParameters.forEach(this::putResponseParameter);
234233
return this;
235234
}
236235

@@ -243,7 +242,7 @@ public Builder responseParameters(Map<String, String> responseParameters) {
243242
* @see IntegrationResponse#getResponseParameters()
244243
*/
245244
public Builder putResponseParameter(String name, String value) {
246-
responseParameters.put(name, value);
245+
responseParameters.get().put(name, value);
247246
return this;
248247
}
249248

@@ -254,7 +253,7 @@ public Builder putResponseParameter(String name, String value) {
254253
* @return Returns the builder.
255254
*/
256255
public Builder removeResponseParameter(String name) {
257-
responseParameters.remove(name);
256+
responseParameters.get().remove(name);
258257
return this;
259258
}
260259

smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/IntegrationTrait.java

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
*/
55
package software.amazon.smithy.aws.apigateway.traits;
66

7-
import java.util.ArrayList;
8-
import java.util.HashMap;
97
import java.util.List;
108
import java.util.Map;
119
import java.util.Optional;
@@ -17,8 +15,7 @@
1715
import software.amazon.smithy.model.traits.AbstractTrait;
1816
import software.amazon.smithy.model.traits.AbstractTraitBuilder;
1917
import software.amazon.smithy.model.traits.Trait;
20-
import software.amazon.smithy.utils.ListUtils;
21-
import software.amazon.smithy.utils.MapUtils;
18+
import software.amazon.smithy.utils.BuilderRef;
2219
import software.amazon.smithy.utils.SmithyBuilder;
2320
import software.amazon.smithy.utils.ToSmithyBuilder;
2421

@@ -64,10 +61,10 @@ private IntegrationTrait(Builder builder) {
6461
connectionType = builder.connectionType;
6562
cacheNamespace = builder.cacheNamespace;
6663
payloadFormatVersion = builder.payloadFormatVersion;
67-
cacheKeyParameters = ListUtils.copyOf(builder.cacheKeyParameters);
68-
requestParameters = MapUtils.copyOf(builder.requestParameters);
69-
requestTemplates = MapUtils.copyOf(builder.requestTemplates);
70-
responses = MapUtils.copyOf(builder.responses);
64+
cacheKeyParameters = builder.cacheKeyParameters.copy();
65+
requestParameters = builder.requestParameters.copy();
66+
requestTemplates = builder.requestTemplates.copy();
67+
responses = builder.responses.copy();
7168
}
7269

7370
public static final class Provider extends AbstractTrait.Provider {
@@ -369,10 +366,10 @@ public static final class Builder extends AbstractTraitBuilder<IntegrationTrait,
369366
private String connectionType;
370367
private String cacheNamespace;
371368
private String payloadFormatVersion;
372-
private final List<String> cacheKeyParameters = new ArrayList<>();
373-
private final Map<String, String> requestParameters = new HashMap<>();
374-
private final Map<String, String> requestTemplates = new HashMap<>();
375-
private final Map<String, IntegrationResponse> responses = new HashMap<>();
369+
private final BuilderRef<List<String>> cacheKeyParameters = BuilderRef.forList();
370+
private final BuilderRef<Map<String, String>> requestParameters = BuilderRef.forOrderedMap();
371+
private final BuilderRef<Map<String, String>> requestTemplates = BuilderRef.forOrderedMap();
372+
private final BuilderRef<Map<String, IntegrationResponse>> responses = BuilderRef.forOrderedMap();
376373

377374
@Override
378375
public IntegrationTrait build() {
@@ -523,7 +520,7 @@ public Builder payloadFormatVersion(String payloadFormatVersion) {
523520
* @return Returns the builder.
524521
*/
525522
public Builder addCacheKeyParameter(String cacheKeyParameter) {
526-
this.cacheKeyParameters.add(cacheKeyParameter);
523+
this.cacheKeyParameters.get().add(cacheKeyParameter);
527524
return this;
528525
}
529526

@@ -535,7 +532,7 @@ public Builder addCacheKeyParameter(String cacheKeyParameter) {
535532
*/
536533
public Builder cacheKeyParameters(List<String> cacheKeyParameters) {
537534
this.cacheKeyParameters.clear();
538-
this.cacheKeyParameters.addAll(cacheKeyParameters);
535+
cacheKeyParameters.forEach(this::addCacheKeyParameter);
539536
return this;
540537
}
541538

@@ -546,7 +543,7 @@ public Builder cacheKeyParameters(List<String> cacheKeyParameters) {
546543
* @return Returns the builder.
547544
*/
548545
public Builder removeCacheKeyParameter(String cacheKeyParameter) {
549-
this.cacheKeyParameters.remove(cacheKeyParameter);
546+
this.cacheKeyParameters.get().remove(cacheKeyParameter);
550547
return this;
551548
}
552549

@@ -569,7 +566,7 @@ public Builder clearCacheKeyParameters() {
569566
* @see IntegrationTrait#getRequestParameters()
570567
*/
571568
public Builder putRequestParameter(String input, String output) {
572-
requestParameters.put(input, output);
569+
requestParameters.get().put(input, output);
573570
return this;
574571
}
575572

@@ -582,7 +579,7 @@ public Builder putRequestParameter(String input, String output) {
582579
*/
583580
public Builder requestParameters(Map<String, String> requestParameters) {
584581
this.requestParameters.clear();
585-
this.requestParameters.putAll(requestParameters);
582+
requestParameters.forEach(this::putRequestParameter);
586583
return this;
587584
}
588585

@@ -593,7 +590,7 @@ public Builder requestParameters(Map<String, String> requestParameters) {
593590
* @return Returns the builder.
594591
*/
595592
public Builder removeRequestParameter(String expression) {
596-
requestParameters.remove(expression);
593+
requestParameters.get().remove(expression);
597594
return this;
598595
}
599596

@@ -606,7 +603,7 @@ public Builder removeRequestParameter(String expression) {
606603
* @see IntegrationTrait#getRequestTemplates()
607604
*/
608605
public Builder putRequestTemplate(String mimeType, String template) {
609-
requestTemplates.put(mimeType, template);
606+
requestTemplates.get().put(mimeType, template);
610607
return this;
611608
}
612609

@@ -619,7 +616,7 @@ public Builder putRequestTemplate(String mimeType, String template) {
619616
*/
620617
public Builder requestTemplates(Map<String, String> requestTemplates) {
621618
this.requestTemplates.clear();
622-
this.requestTemplates.putAll(requestTemplates);
619+
requestTemplates.forEach(this::putRequestTemplate);
623620
return this;
624621
}
625622

@@ -630,7 +627,7 @@ public Builder requestTemplates(Map<String, String> requestTemplates) {
630627
* @return Returns the builder.
631628
*/
632629
public Builder removeRequestTemplate(String mimeType) {
633-
requestTemplates.remove(mimeType);
630+
requestTemplates.get().remove(mimeType);
634631
return this;
635632
}
636633

@@ -643,7 +640,7 @@ public Builder removeRequestTemplate(String mimeType) {
643640
* @see IntegrationTrait#getResponses()
644641
*/
645642
public Builder putResponse(String statusCodeRegex, IntegrationResponse integrationResponse) {
646-
responses.put(statusCodeRegex, integrationResponse);
643+
responses.get().put(statusCodeRegex, integrationResponse);
647644
return this;
648645
}
649646

@@ -656,7 +653,7 @@ public Builder putResponse(String statusCodeRegex, IntegrationResponse integrati
656653
*/
657654
public Builder responses(Map<String, IntegrationResponse> responses) {
658655
this.responses.clear();
659-
this.responses.putAll(responses);
656+
responses.forEach(this::putResponse);
660657
return this;
661658
}
662659

@@ -667,7 +664,7 @@ public Builder responses(Map<String, IntegrationResponse> responses) {
667664
* @return Returns the builder.
668665
*/
669666
public Builder removeResponse(String statusCodeRegex) {
670-
responses.remove(statusCodeRegex);
667+
responses.get().remove(statusCodeRegex);
671668
return this;
672669
}
673670
}

smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/IntegrationTraitIndex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package software.amazon.smithy.aws.apigateway.traits;
66

7+
import java.util.Collections;
78
import java.util.HashMap;
89
import java.util.Map;
910
import java.util.Optional;
@@ -15,7 +16,6 @@
1516
import software.amazon.smithy.model.shapes.ShapeId;
1617
import software.amazon.smithy.model.shapes.ToShapeId;
1718
import software.amazon.smithy.model.traits.Trait;
18-
import software.amazon.smithy.utils.MapUtils;
1919

2020
/**
2121
* Computes the API Gateway integration for each operation,
@@ -48,7 +48,7 @@ public static IntegrationTraitIndex of(Model model) {
4848
* @return The integration trait or an empty optional if none set
4949
*/
5050
public Optional<Trait> getIntegrationTrait(ToShapeId service, ToShapeId shape) {
51-
return Optional.ofNullable(traits.getOrDefault(service.toShapeId(), MapUtils.of())
51+
return Optional.ofNullable(traits.getOrDefault(service.toShapeId(), Collections.emptyMap())
5252
.get(shape.toShapeId()));
5353
}
5454

0 commit comments

Comments
 (0)