diff --git a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysTrait.java b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysTrait.java index 24dd3631434..d319095f007 100644 --- a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysTrait.java +++ b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysTrait.java @@ -48,9 +48,7 @@ public Provider() { @Override public Builder toBuilder() { - ConditionKeysTrait.Builder builder = builder().sourceLocation(getSourceLocation()); - getValues().forEach(builder::addValue); - return builder; + return builder().sourceLocation(getSourceLocation()).values(getValues()); } public static final class Builder extends StringListTrait.Builder { diff --git a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTrait.java b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTrait.java index 7800636240e..4a434b1b7c7 100644 --- a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTrait.java +++ b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTrait.java @@ -45,9 +45,7 @@ public static Builder builder() { @Override public Builder toBuilder() { - Builder builder = builder().sourceLocation(getSourceLocation()); - getValues().forEach(builder::addValue); - return builder; + return builder().sourceLocation(getSourceLocation()).values(getValues()); } public static final class Builder extends StringListTrait.Builder { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/traits/StringListTrait.java b/smithy-model/src/main/java/software/amazon/smithy/model/traits/StringListTrait.java index 5ba2dafc556..64d80238916 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/traits/StringListTrait.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/traits/StringListTrait.java @@ -46,7 +46,11 @@ public StringListTrait(ShapeId id, List values, FromSourceLocation sourc @Override protected final Node createNode() { - return ArrayNode.fromStrings(values); + List nodes = new ArrayList<>(values.size()); + for (String value : values) { + nodes.add(Node.from(value)); + } + return new ArrayNode(nodes, getSourceLocation()); } /** diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/traits/TagsTrait.java b/smithy-model/src/main/java/software/amazon/smithy/model/traits/TagsTrait.java index f3f47a89395..b60943f7695 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/traits/TagsTrait.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/traits/TagsTrait.java @@ -39,7 +39,7 @@ public Provider() { @Override public Builder toBuilder() { - return builder().values(getValues()); + return builder().sourceLocation(getSourceLocation()).values(getValues()); } public static Builder builder() { diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/traits/TagsTraitTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/traits/TagsTraitTest.java index 9e72549418a..65d0f2bc7f5 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/traits/TagsTraitTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/traits/TagsTraitTest.java @@ -23,8 +23,12 @@ import java.util.Optional; import org.junit.jupiter.api.Test; +import software.amazon.smithy.model.SourceLocation; +import software.amazon.smithy.model.node.ArrayNode; import software.amazon.smithy.model.node.Node; +import software.amazon.smithy.model.node.StringNode; import software.amazon.smithy.model.shapes.ShapeId; +import software.amazon.smithy.utils.ListUtils; public class TagsTraitTest { @Test @@ -40,4 +44,18 @@ public void loadsTrait() { assertThat(tagsTrait.getValues(), contains("experimental")); assertThat(tagsTrait.toNode(), equalTo(node)); } + + @Test + public void hasSourceLocation() { + SourceLocation location1 = new SourceLocation("/foo.smithy", 1, 1); + SourceLocation location2 = new SourceLocation("/foo.smithy", 1, 2); + ArrayNode node = new ArrayNode(ListUtils.of(new StringNode("a", location1)), location2); + ShapeId id = ShapeId.from("ns.qux#foo"); + TraitFactory provider = TraitFactory.createServiceFactory(); + Optional trait = provider.createTrait(ShapeId.from("smithy.api#tags"), id, node); + + assertTrue(trait.isPresent()); + assertThat(trait.get().getSourceLocation(), equalTo(location2)); + assertThat(trait.get().toNode().getSourceLocation(), equalTo(location2)); + } }