Skip to content

Commit bc14a5d

Browse files
committed
Recursively call isIterationRequired to remove redundant code
1 parent a6a0cd6 commit bc14a5d

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/StructuredMemberWriter.java

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
import software.amazon.smithy.codegen.core.SymbolProvider;
2222
import software.amazon.smithy.model.Model;
2323
import software.amazon.smithy.model.shapes.CollectionShape;
24-
import software.amazon.smithy.model.shapes.ListShape;
2524
import software.amazon.smithy.model.shapes.MapShape;
2625
import software.amazon.smithy.model.shapes.MemberShape;
27-
import software.amazon.smithy.model.shapes.SetShape;
2826
import software.amazon.smithy.model.shapes.Shape;
2927
import software.amazon.smithy.model.shapes.SimpleShape;
3028
import software.amazon.smithy.model.shapes.StructureShape;
@@ -73,23 +71,24 @@ void writeMembers(TypeScriptWriter writer, Shape shape) {
7371
}
7472

7573
/**
76-
* Recursively writes filterSensitiveLog for arrays (ListShape|SetShape)
74+
* Recursively writes filterSensitiveLog for arrays (CollectionShape)
7775
*/
78-
void writeFilterSensitiveLogForArray(TypeScriptWriter writer, MemberShape arrayMember) {
79-
Shape memberShape = model.expectShape(arrayMember.getTarget());
76+
void writeFilterSensitiveLogForCollection(TypeScriptWriter writer, MemberShape collectionMember) {
77+
Shape memberShape = model.expectShape(collectionMember.getTarget());
8078
if (memberShape instanceof StructureShape) {
8179
// Call filterSensitiveLog on Structure
82-
writer.write("${T}.filterSensitiveLog", symbolProvider.toSymbol(arrayMember));
83-
} else if (memberShape instanceof ListShape || memberShape instanceof SetShape) {
80+
writer.write("${T}.filterSensitiveLog", symbolProvider.toSymbol(collectionMember));
81+
} else if (memberShape instanceof CollectionShape) {
8482
// Iterate over array items, and call array specific function on each member
8583
writer.openBlock("item => item.map(", ")",
8684
() -> {
87-
MemberShape nestedArrayMember = ((CollectionShape) memberShape).getMember();
88-
writeFilterSensitiveLogForArray(writer, nestedArrayMember);
85+
MemberShape nestedCollectionMember = ((CollectionShape) memberShape).getMember();
86+
writeFilterSensitiveLogForCollection(writer, nestedCollectionMember);
8987
}
9088
);
9189
} else {
92-
// Function is inside another function, so just return item in else case
90+
// This path will never reach because of recursive isIterationRequired
91+
// adding it to not break the code, if it does reach in future
9392
writer.write("item => item");
9493
}
9594
}
@@ -108,7 +107,8 @@ void writeFilterSensitiveLogForMap(TypeScriptWriter writer, MemberShape mapMembe
108107
writer.write("acc[key] = ${T}.filterSensitiveLog(value);",
109108
symbolProvider.toSymbol(mapMember));
110109
} else {
111-
// populate value in in acc[key]
110+
// This path will never reach because of recursive isIterationRequired
111+
// adding it to not break the code, if it does reach in future
112112
writer.write("acc[key] = value;");
113113
}
114114
writer.write("return acc;");
@@ -128,14 +128,14 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
128128
// Call filterSensitiveLog on Structure
129129
writer.write("...(obj.${L} && { ${L}: ${T}.filterSensitiveLog(obj.${L})}),",
130130
memberName, memberName, symbolProvider.toSymbol(member), memberName);
131-
} else if (memberShape instanceof ListShape || memberShape instanceof SetShape) {
132-
MemberShape arrayMember = ((CollectionShape) memberShape).getMember();
133-
if (isIterationRequired(model.expectShape(arrayMember.getTarget()))) {
131+
} else if (memberShape instanceof CollectionShape) {
132+
MemberShape collectionMember = ((CollectionShape) memberShape).getMember();
133+
if (isIterationRequired(model.expectShape(collectionMember.getTarget()))) {
134134
// Iterate over array items, and call array specific function on each member
135135
writer.openBlock("...(obj.${L} && { ${L}: obj.${L}.map(", ")}),",
136136
memberName, memberName, memberName,
137137
() -> {
138-
writeFilterSensitiveLogForArray(writer, arrayMember);
138+
writeFilterSensitiveLogForCollection(writer, collectionMember);
139139
}
140140
);
141141
}
@@ -161,12 +161,16 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
161161
* @return If the iteration is required on memberShape
162162
*/
163163
private boolean isIterationRequired(Shape memberShape) {
164-
return (
165-
memberShape instanceof StructureShape ||
166-
memberShape instanceof ListShape ||
167-
memberShape instanceof SetShape ||
168-
memberShape instanceof MapShape
169-
);
164+
if (memberShape instanceof StructureShape) {
165+
return true;
166+
} if (memberShape instanceof CollectionShape) {
167+
MemberShape collectionMember = ((CollectionShape) memberShape).getMember();
168+
return isIterationRequired(model.expectShape(collectionMember.getTarget()));
169+
} else if (memberShape instanceof MapShape) {
170+
MemberShape mapMember = ((MapShape) memberShape).getValue();
171+
return isIterationRequired(model.expectShape(mapMember.getTarget()));
172+
}
173+
return false;
170174
}
171175

172176
/**

0 commit comments

Comments
 (0)