Skip to content

Commit b339a31

Browse files
committed
use forward recursive selector
1 parent 7542484 commit b339a31

File tree

1 file changed

+11
-25
lines changed

1 file changed

+11
-25
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/validation/SensitiveDataFinder.java

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717

1818
import java.util.HashMap;
1919
import java.util.Map;
20+
import java.util.Set;
2021
import software.amazon.smithy.model.Model;
21-
import software.amazon.smithy.model.shapes.CollectionShape;
22+
import software.amazon.smithy.model.selector.Selector;
2223
import software.amazon.smithy.model.shapes.MapShape;
2324
import software.amazon.smithy.model.shapes.MemberShape;
2425
import software.amazon.smithy.model.shapes.Shape;
25-
import software.amazon.smithy.model.shapes.SimpleShape;
2626
import software.amazon.smithy.model.traits.SensitiveTrait;
2727

2828
public class SensitiveDataFinder {
@@ -44,34 +44,20 @@ private boolean findRecursive(Shape shape, Model model) {
4444
return true;
4545
}
4646

47-
if (shape instanceof MemberShape) {
48-
MemberShape memberShape = (MemberShape) shape;
49-
if (memberShape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
50-
cache.put(shape, true);
51-
return true;
52-
}
53-
Shape memberTarget = model.expectShape(memberShape.getTarget());
54-
return findRecursive(memberTarget, model);
47+
if (shape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
48+
cache.put(shape, true);
49+
return true;
5550
}
5651

57-
if (shape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
52+
Selector selector = Selector.parse("[id = '" + shape.getId() + "']" + " ~> [trait|sensitive]");
53+
Set<Shape> matches = selector.select(model);
54+
boolean found = !matches.isEmpty();
55+
if (found) {
5856
cache.put(shape, true);
5957
return true;
60-
} else if (shape instanceof SimpleShape) {
61-
cache.put(shape, false);
62-
return false;
63-
} else if (shape.isStructureShape() || shape.isUnionShape()) {
64-
boolean found = shape.getAllMembers()
65-
.values()
66-
.stream()
67-
.anyMatch(m -> findRecursive(m, model));
58+
}
6859

69-
cache.put(shape, found);
70-
return found;
71-
} else if (shape instanceof CollectionShape) {
72-
MemberShape collectionMember = ((CollectionShape) shape).getMember();
73-
return findRecursive(collectionMember, model);
74-
} else if (shape instanceof MapShape) {
60+
if (shape instanceof MapShape) {
7561
MemberShape keyMember = ((MapShape) shape).getKey();
7662
MemberShape valMember = ((MapShape) shape).getValue();
7763
return findRecursive(keyMember, model) || findRecursive(valMember, model);

0 commit comments

Comments
 (0)