21
21
import software .amazon .smithy .codegen .core .SymbolProvider ;
22
22
import software .amazon .smithy .model .Model ;
23
23
import software .amazon .smithy .model .shapes .CollectionShape ;
24
- import software .amazon .smithy .model .shapes .ListShape ;
25
24
import software .amazon .smithy .model .shapes .MapShape ;
26
25
import software .amazon .smithy .model .shapes .MemberShape ;
27
- import software .amazon .smithy .model .shapes .SetShape ;
28
26
import software .amazon .smithy .model .shapes .Shape ;
29
27
import software .amazon .smithy .model .shapes .SimpleShape ;
30
28
import software .amazon .smithy .model .shapes .StructureShape ;
@@ -73,23 +71,24 @@ void writeMembers(TypeScriptWriter writer, Shape shape) {
73
71
}
74
72
75
73
/**
76
- * Recursively writes filterSensitiveLog for arrays (ListShape|SetShape )
74
+ * Recursively writes filterSensitiveLog for arrays (CollectionShape )
77
75
*/
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 ());
80
78
if (memberShape instanceof StructureShape ) {
81
79
// 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 ) {
84
82
// Iterate over array items, and call array specific function on each member
85
83
writer .openBlock ("item => item.map(" , ")" ,
86
84
() -> {
87
- MemberShape nestedArrayMember = ((CollectionShape ) memberShape ).getMember ();
88
- writeFilterSensitiveLogForArray (writer , nestedArrayMember );
85
+ MemberShape nestedCollectionMember = ((CollectionShape ) memberShape ).getMember ();
86
+ writeFilterSensitiveLogForCollection (writer , nestedCollectionMember );
89
87
}
90
88
);
91
89
} 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
93
92
writer .write ("item => item" );
94
93
}
95
94
}
@@ -108,7 +107,8 @@ void writeFilterSensitiveLogForMap(TypeScriptWriter writer, MemberShape mapMembe
108
107
writer .write ("acc[key] = ${T}.filterSensitiveLog(value);" ,
109
108
symbolProvider .toSymbol (mapMember ));
110
109
} 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
112
112
writer .write ("acc[key] = value;" );
113
113
}
114
114
writer .write ("return acc;" );
@@ -128,14 +128,14 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
128
128
// Call filterSensitiveLog on Structure
129
129
writer .write ("...(obj.${L} && { ${L}: ${T}.filterSensitiveLog(obj.${L})})," ,
130
130
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 ()))) {
134
134
// Iterate over array items, and call array specific function on each member
135
135
writer .openBlock ("...(obj.${L} && { ${L}: obj.${L}.map(" , ")})," ,
136
136
memberName , memberName , memberName ,
137
137
() -> {
138
- writeFilterSensitiveLogForArray (writer , arrayMember );
138
+ writeFilterSensitiveLogForCollection (writer , collectionMember );
139
139
}
140
140
);
141
141
}
@@ -161,12 +161,16 @@ void writeFilterSensitiveLog(TypeScriptWriter writer, Shape shape) {
161
161
* @return If the iteration is required on memberShape
162
162
*/
163
163
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 ;
170
174
}
171
175
172
176
/**
0 commit comments