Skip to content

Commit e44e578

Browse files
committed
Fix trait code generation for collections of boolean.
1 parent 50d325b commit e44e578

File tree

6 files changed

+37
-16
lines changed

6 files changed

+37
-16
lines changed
Lines changed: 8 additions & 0 deletions
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.lists#NestedBooleanListTrait
6+
7+
@NestedBooleanListTrait({name: "a", items: [[[true]]]})
8+
structure myStruct {}

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ final class FromNodeMapperVisitor extends ShapeVisitor.DataShapeVisitor<Void> {
5858

5959
@Override
6060
public Void booleanShape(BooleanShape shape) {
61-
writer.write("BooleanMember($1S, builder::$1L)", varName);
61+
writer.write("$L.expectBooleanNode().getValue()", varName);
6262
return null;
6363
}
6464

@@ -67,22 +67,17 @@ public Void listShape(ListShape shape) {
6767
writer.write("$L.expectArrayNode()", varName);
6868
writer.indent();
6969
writer.writeWithNoFormatting(".getElements().stream()");
70+
String lambdaVarName = nestedLevel > 0 ? "n" + nestedLevel : "n";
71+
writer.write(".map($L -> $C)",
72+
lambdaVarName,
73+
(Runnable) () -> shape.getMember()
74+
.accept(new FromNodeMapperVisitor(writer,
75+
model,
76+
lambdaVarName,
77+
nestedLevel + 1)));
7078
if (nestedLevel == 0) { // Triggered when shape is a member.
71-
writer.write(".map(n -> $C)",
72-
(Runnable) () -> shape.getMember()
73-
.accept(new FromNodeMapperVisitor(writer,
74-
model,
75-
"n",
76-
nestedLevel + 1)));
7779
writer.writeWithNoFormatting(".forEach(builder::addValues);");
7880
} else { // Triggered when shape is nested.
79-
writer.write(".map($L -> $C)",
80-
varName + nestedLevel,
81-
(Runnable) () -> shape.getMember()
82-
.accept(new FromNodeMapperVisitor(writer,
83-
model,
84-
varName + nestedLevel,
85-
nestedLevel + 1)));
8681
writer.write(".collect($T.toList())", Collectors.class);
8782
}
8883
writer.dedent();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public Void structureShape(StructureShape shape) {
139139
if (shape.hasTrait(TraitDefinition.ID)) {
140140
// If the shape is a trait we need to add the source location of trait to the
141141
// generated node.
142-
writer.writeInline(".sourceLocation(getSourceLocation())");
142+
writer.write(".sourceLocation(getSourceLocation())");
143143
}
144144
for (MemberShape mem : shape.members()) {
145145
if (TraitCodegenUtils.isNullableMember(mem)) {

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 = 63;
29+
private static final int EXPECTED_NUMBER_OF_FILES = 64;
3030

3131
private MockManifest manifest;
3232
private Model model;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
$version: "2.0"
2+
3+
namespace test.smithy.traitcodegen.lists
4+
5+
@trait
6+
structure NestedBooleanListTrait {
7+
name: String
8+
items: BooleanItemsList
9+
}
10+
11+
list BooleanItemsList {
12+
member: BooleanItemsListEntry
13+
}
14+
15+
list BooleanItemsListEntry {
16+
member: Boolean
17+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ lists/string-list-trait.smithy
1616
lists/struct-list-trait.smithy
1717
lists/document-list-trait.smithy
1818
lists/nested-list-trait.smithy
19+
lists/nested-boolean-list-trait.smithy
1920
maps/string-string-map-trait.smithy
2021
maps/string-to-struct-map-trait.smithy
2122
maps/string-to-document-map-trait.smithy

0 commit comments

Comments
 (0)