Skip to content

Commit e3735d0

Browse files
authored
Fix incorrect builder properties assignment for enum with default value (#2752)
1 parent ac31da9 commit e3735d0

7 files changed

Lines changed: 66 additions & 1 deletion

File tree

smithy-trait-codegen/src/it/java/software/amazon/smithy/traitcodegen/test/CreatesTraitTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@
3939
import com.example.traits.numbers.LongTrait;
4040
import com.example.traits.numbers.ShortTrait;
4141
import com.example.traits.structures.BasicAnnotationTrait;
42+
import com.example.traits.structures.EnumA;
43+
import com.example.traits.structures.EnumB;
4244
import com.example.traits.structures.NestedA;
4345
import com.example.traits.structures.NestedB;
4446
import com.example.traits.structures.StructMemberWithTimestampFormatTrait;
47+
import com.example.traits.structures.StructWithEnumDefaultTrait;
4548
import com.example.traits.structures.StructWithIdrefMemberTrait;
4649
import com.example.traits.structures.StructWithListOfMapTrait;
4750
import com.example.traits.structures.StructWithUniqueItemsListTrait;
@@ -221,6 +224,12 @@ static Stream<Arguments> createTraitTests() {
221224
.memberEpochSeconds(Instant.ofEpochSecond((long) 1515531081.123))
222225
.build()
223226
.toNode()),
227+
Arguments.of(StructWithEnumDefaultTrait.ID,
228+
StructWithEnumDefaultTrait.builder()
229+
.memberA(EnumA.TWO)
230+
.memberB(EnumB.FOUR)
231+
.build()
232+
.toNode()),
224233
// Timestamps
225234
Arguments.of(TimestampTrait.ID, Node.from("1985-04-12T23:20:50.52Z")),
226235
Arguments.of(DateTimeTimestampTrait.ID, Node.from("1985-04-12T23:20:50.52Z")),

smithy-trait-codegen/src/it/java/software/amazon/smithy/traitcodegen/test/LoadsFromModelTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@
4646
import com.example.traits.numbers.LongTrait;
4747
import com.example.traits.numbers.ShortTrait;
4848
import com.example.traits.structures.BasicAnnotationTrait;
49+
import com.example.traits.structures.EnumA;
50+
import com.example.traits.structures.EnumB;
4951
import com.example.traits.structures.NestedA;
5052
import com.example.traits.structures.NestedB;
5153
import com.example.traits.structures.StructMemberWithTimestampFormatTrait;
54+
import com.example.traits.structures.StructWithEnumDefaultTrait;
5255
import com.example.traits.structures.StructWithIdrefMemberTrait;
5356
import com.example.traits.structures.StructWithListOfMapTrait;
5457
import com.example.traits.structures.StructWithUniqueItemsListTrait;
@@ -343,6 +346,13 @@ static Stream<Arguments> loadsModelTests() {
343346
DateTimeFormatter.RFC_1123_DATE_TIME.parse("Tue, 29 Apr 2014 18:30:38 GMT"))),
344347
"getMemberEpochSeconds",
345348
Optional.of(Instant.ofEpochSecond((long) 1515531081.123)))),
349+
Arguments.of("structures/struct-with-enum-default-trait.smithy",
350+
StructWithEnumDefaultTrait.class,
351+
MapUtils.of(
352+
"getMemberA",
353+
EnumA.ONE,
354+
"getMemberB",
355+
EnumB.THREE)),
346356
// Timestamps
347357
Arguments.of("timestamps/struct-with-nested-timestamps.smithy",
348358
StructWithNestedTimestampsTrait.class,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
$version: "2.0"
2+
3+
namespace test.smithy.traitcodegen
4+
5+
use test.smithy.traitcodegen.structures#StructWithEnumDefault
6+
7+
@StructWithEnumDefault
8+
structure myStruct {}

smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/BuilderGenerator.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import software.amazon.smithy.model.shapes.ByteShape;
2222
import software.amazon.smithy.model.shapes.DocumentShape;
2323
import software.amazon.smithy.model.shapes.DoubleShape;
24+
import software.amazon.smithy.model.shapes.EnumShape;
2425
import software.amazon.smithy.model.shapes.FloatShape;
26+
import software.amazon.smithy.model.shapes.IntEnumShape;
2527
import software.amazon.smithy.model.shapes.IntegerShape;
2628
import software.amazon.smithy.model.shapes.ListShape;
2729
import software.amazon.smithy.model.shapes.LongShape;
@@ -534,5 +536,21 @@ public Void timestampShape(TimestampShape timestampShape) {
534536
writer.write("$T.parse($S)", Instant.class, defaultValue.expectStringNode().getValue());
535537
return null;
536538
}
539+
540+
@Override
541+
public Void intEnumShape(IntEnumShape intEnumShape) {
542+
writer.write("$T.from($L)",
543+
symbolProvider.toSymbol(member),
544+
defaultValue.expectNumberNode().getValue());
545+
return null;
546+
}
547+
548+
@Override
549+
public Void enumShape(EnumShape enumShape) {
550+
writer.write("$T.from($S)",
551+
symbolProvider.toSymbol(member),
552+
defaultValue.expectStringNode().getValue());
553+
return null;
554+
}
537555
}
538556
}

smithy-trait-codegen/src/test/java/software/amazon/smithy/traitcodegen/TraitCodegenPluginTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import software.amazon.smithy.model.node.ObjectNode;
2727

2828
public class TraitCodegenPluginTest {
29-
private static final int EXPECTED_NUMBER_OF_FILES = 69;
29+
private static final int EXPECTED_NUMBER_OF_FILES = 72;
3030

3131
private MockManifest manifest;
3232
private Model model;

smithy-trait-codegen/src/test/resources/META-INF/smithy/manifest

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ structures/struct-with-listofmap-trait.smithy
4444
structures/struct-with-uniqueitems-list-trait.smithy
4545
structures/struct-with-idref-member-trait.smithy
4646
structures/struct-member-with-timestamp-format-trait.smithy
47+
structures/struct-with-enum-default-trait.smithy
4748
timestamps/date-time-format-timestamp-trait.smithy
4849
timestamps/epoch-seconds-format-timestamp-trait.smithy
4950
timestamps/http-date-format-timestamp-trait.smithy
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
$version: "2.0"
2+
3+
namespace test.smithy.traitcodegen.structures
4+
5+
@trait
6+
structure StructWithEnumDefault {
7+
memberA: EnumA = "1"
8+
memberB: EnumB = 3
9+
}
10+
11+
enum EnumA {
12+
ONE = "1"
13+
TWO = "2"
14+
}
15+
16+
intEnum EnumB {
17+
THREE = 3
18+
FOUR = 4
19+
}

0 commit comments

Comments
 (0)