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 memberFromEnumDefinition( if (definition.isDeprecated()) { builder.addTrait(DeprecatedTrait.builder().build()); } + if (definition.hasTag("internal")) { + builder.addTrait(new InternalTrait()); + } return Optional.of(builder.build()); } catch (ShapeIdSyntaxException e) { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ModelTransformer.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ModelTransformer.java index 2dd2fd7ec7d..bc8bf0217c2 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ModelTransformer.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ModelTransformer.java @@ -515,6 +515,10 @@ public Model changeShapeType( * *

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())); }