diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java index e8ade4e81f1..ef3fc22c8fd 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java @@ -29,6 +29,7 @@ import software.amazon.smithy.model.traits.EnumDefinition; import software.amazon.smithy.model.traits.EnumTrait; import software.amazon.smithy.model.traits.EnumValueTrait; +import software.amazon.smithy.model.traits.InternalTrait; import software.amazon.smithy.model.traits.TagsTrait; import software.amazon.smithy.model.traits.Trait; import software.amazon.smithy.model.traits.UnitTypeTrait; @@ -199,6 +200,12 @@ public static boolean canConvertToEnum(StringShape shape, boolean synthesizeEnum /** * Converts an enum definition to the equivalent enum member shape. * + *
If an enum definition is marked as deprecated, the DeprecatedTrait + * is applied to the converted enum member shape. + * + *
If an enum definition has an "internal" tag, the InternalTrait is
+ * applied to the converted enum member shape.
+ *
* @param parentId The {@link ShapeId} of the enum shape.
* @param synthesizeName Whether to synthesize a name if possible.
* @return An optional member shape representing the enum definition,
@@ -233,6 +240,9 @@ static Optional A member will be created on the shape for each entry in the {@link EnumTrait}.
*
+ * When the enum definition from the enum trait has been marked as deprecated, or
+ * tagged as "internal", the corresponding enum shape member will be marked with the
+ * DeprecatedTrait or InternalTrait accordingly.
+ *
* @param model Model to transform.
* @param synthesizeEnumNames Whether enums without names should have names synthesized if possible.
* @return Returns the transformed model.
diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/EnumShapeTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/EnumShapeTest.java
index 2cb101c76ab..8a9e951c95d 100644
--- a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/EnumShapeTest.java
+++ b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/EnumShapeTest.java
@@ -30,6 +30,7 @@
import software.amazon.smithy.model.traits.EnumDefinition;
import software.amazon.smithy.model.traits.EnumTrait;
import software.amazon.smithy.model.traits.EnumValueTrait;
+import software.amazon.smithy.model.traits.InternalTrait;
import software.amazon.smithy.model.traits.TagsTrait;
import software.amazon.smithy.model.traits.UnitTypeTrait;
import software.amazon.smithy.model.traits.synthetic.SyntheticEnumTrait;
@@ -125,6 +126,7 @@ public void addMemberFromEnumTrait() {
EnumDefinition enumDefinition = EnumDefinition.builder()
.name("foo")
.value("bar")
+ .tags(ListUtils.of("internal"))
.build();
EnumShape shape = builder.setMembersFromEnumTrait(EnumTrait.builder().addEnum(enumDefinition).build()).build();
@@ -133,6 +135,8 @@ public void addMemberFromEnumTrait() {
.id(shape.getId().withMember("foo"))
.target(UnitTypeTrait.UNIT)
.addTrait(EnumValueTrait.builder().stringValue("bar").build())
+ .addTrait(new InternalTrait())
+ .addTrait(TagsTrait.builder().addValue("internal").build())
.build());
assertTrue(shape.hasTrait(EnumTrait.class));
diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/ChangeShapeTypeTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/ChangeShapeTypeTest.java
index 4c7cbb1969a..9ccc9f956be 100644
--- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/ChangeShapeTypeTest.java
+++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/ChangeShapeTypeTest.java
@@ -46,6 +46,8 @@
import software.amazon.smithy.model.traits.EnumDefinition;
import software.amazon.smithy.model.traits.EnumTrait;
import software.amazon.smithy.model.traits.EnumValueTrait;
+import software.amazon.smithy.model.traits.InternalTrait;
+import software.amazon.smithy.model.traits.TagsTrait;
import software.amazon.smithy.model.traits.UnitTypeTrait;
import software.amazon.smithy.model.traits.synthetic.SyntheticEnumTrait;
import software.amazon.smithy.utils.ListUtils;
@@ -269,6 +271,7 @@ public void canConvertStringToEnum() {
.addEnum(EnumDefinition.builder()
.name("foo")
.value("bar")
+ .addTag("internal")
.build())
.build();
SourceLocation source = new SourceLocation("/foo", 1, 1);
@@ -280,7 +283,6 @@ public void canConvertStringToEnum() {
.build();
Model model = Model.assembler().addShape(startShape).assemble().unwrap();
Model result = ModelTransformer.create().changeShapeType(model, MapUtils.of(id, ShapeType.ENUM));
-
assertThat(result.expectShape(id).getType(), Matchers.is(ShapeType.ENUM));
assertThat(result.expectShape(id).getSourceLocation(), Matchers.equalTo(source));
assertThat(result.expectShape(id).members(), Matchers.hasSize(1));
@@ -288,6 +290,8 @@ public void canConvertStringToEnum() {
.id(id.withMember("foo"))
.target(UnitTypeTrait.UNIT)
.addTrait(EnumValueTrait.builder().stringValue("bar").build())
+ .addTrait(new InternalTrait())
+ .addTrait(TagsTrait.builder().addValue("internal").build())
.build()));
}