Skip to content

Commit ff59244

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

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

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

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

1818
import java.util.HashMap;
1919
import java.util.Map;
20+
import java.util.Set;
21+
2022
import software.amazon.smithy.model.Model;
21-
import software.amazon.smithy.model.shapes.CollectionShape;
23+
import software.amazon.smithy.model.selector.Selector;
2224
import software.amazon.smithy.model.shapes.MapShape;
2325
import software.amazon.smithy.model.shapes.MemberShape;
2426
import software.amazon.smithy.model.shapes.Shape;
25-
import software.amazon.smithy.model.shapes.SimpleShape;
2627
import software.amazon.smithy.model.traits.SensitiveTrait;
2728

2829
public class SensitiveDataFinder {
@@ -44,34 +45,20 @@ private boolean findRecursive(Shape shape, Model model) {
4445
return true;
4546
}
4647

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);
48+
if (shape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
49+
cache.put(shape, true);
50+
return true;
5551
}
5652

57-
if (shape.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
53+
Selector selector = Selector.parse("[id = '" + shape.getId() + "']" + " ~> [trait|sensitive]");
54+
Set<Shape> matches = selector.select(model);
55+
boolean found = !matches.isEmpty();
56+
if (found) {
5857
cache.put(shape, true);
5958
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));
59+
}
6860

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) {
61+
if (shape instanceof MapShape) {
7562
MemberShape keyMember = ((MapShape) shape).getKey();
7663
MemberShape valMember = ((MapShape) shape).getValue();
7764
return findRecursive(keyMember, model) || findRecursive(valMember, model);

0 commit comments

Comments
 (0)