6565import com .semmle .js .ast .SourceLocation ;
6666import com .semmle .js .ast .SpreadElement ;
6767import com .semmle .js .ast .Statement ;
68+ import com .semmle .js .ast .StaticInitializer ;
6869import com .semmle .js .ast .Super ;
6970import com .semmle .js .ast .SwitchCase ;
7071import com .semmle .js .ast .SwitchStatement ;
@@ -454,7 +455,7 @@ public Node visit(ClassExpression nd, Void v) {
454455
455456 @ Override
456457 public Node visit (ClassBody nd , Void v ) {
457- for (Node m : nd .getBody ()) {
458+ for (MemberDefinition <?> m : nd .getBody ()) {
458459 if (m instanceof MethodDefinition ) {
459460 Node first = m .accept (this , v );
460461 if (first != null ) return first ;
@@ -1163,11 +1164,8 @@ public Void visit(ClassExpression nd, SuccessorInfo i) {
11631164 private Map <Expression , AClass > constructor2Class = new LinkedHashMap <>();
11641165
11651166 private Void visit (Node nd , AClass ac , SuccessorInfo i ) {
1166- for (Node m : ac .getBody ().getBody ()) {
1167- if (m instanceof MemberDefinition ) {
1168- MemberDefinition md = (MemberDefinition ) m ;
1169- if (md .isConstructor () && md .isConcrete ()) constructor2Class .put (md .getValue (), ac );
1170- }
1167+ for (MemberDefinition <?> md : ac .getBody ().getBody ()) {
1168+ if (md .isConstructor () && md .isConcrete ()) constructor2Class .put (md .getValue (), ac );
11711169 }
11721170 visitSequence (ac .getId (), ac .getSuperClass (), ac .getBody (), nd );
11731171 writeSuccessors (nd , visitSequence (getStaticInitializers (ac .getBody ()), getDecoratorsOfClass (ac ), i .getAllSuccessors ()));
@@ -1207,18 +1205,15 @@ private List<Node> getDecoratorsOfClass(AClass ac) {
12071205 List <Node > staticDecorators = new ArrayList <>();
12081206 List <Node > constructorParameterDecorators = new ArrayList <>();
12091207 List <Node > classDecorators = (List <Node >)(List <?>)ac .getDecorators ();
1210- for (Node memberNode : ac .getBody ().getBody ()) {
1211- if (memberNode instanceof MemberDefinition ) {
1212- MemberDefinition <?> member = (MemberDefinition <?>) memberNode ;
1213- if (!member .isConcrete ()) continue ;
1214- List <Node > decorators = getMemberDecorators (member );
1215- if (member .isConstructor ()) {
1216- constructorParameterDecorators .addAll (decorators );
1217- } else if (member .isStatic ()) {
1218- staticDecorators .addAll (decorators );
1219- } else {
1220- instanceDecorators .addAll (decorators );
1221- }
1208+ for (MemberDefinition <?> member : ac .getBody ().getBody ()) {
1209+ if (!member .isConcrete ()) continue ;
1210+ List <Node > decorators = getMemberDecorators (member );
1211+ if (member .isConstructor ()) {
1212+ constructorParameterDecorators .addAll (decorators );
1213+ } else if (member .isStatic ()) {
1214+ staticDecorators .addAll (decorators );
1215+ } else {
1216+ instanceDecorators .addAll (decorators );
12221217 }
12231218 }
12241219 List <Node > result = new ArrayList <>();
@@ -1619,8 +1614,8 @@ public Void visit(ClassBody nd, SuccessorInfo i) {
16191614
16201615 private List <MemberDefinition <?>> getMethods (ClassBody nd ) {
16211616 List <MemberDefinition <?>> mds = new ArrayList <>();
1622- for (Node md : nd .getBody ()) {
1623- if (md instanceof MethodDefinition ) mds .add (( MemberDefinition <?>) md );
1617+ for (MemberDefinition <?> md : nd .getBody ()) {
1618+ if (md instanceof MethodDefinition ) mds .add (md );
16241619 }
16251620 return mds ;
16261621 }
@@ -1630,18 +1625,16 @@ private List<MemberDefinition<?>> getMethods(ClassBody nd) {
16301625 */
16311626 private List <Node > getStaticInitializers (ClassBody nd ) {
16321627 List <Node > nodes = new ArrayList <>();
1633- for (Node node : nd .getBody ()) {
1628+ for (MemberDefinition <?> node : nd .getBody ()) {
16341629 if (node instanceof FieldDefinition && ((FieldDefinition )node ).isStatic ()) nodes .add (node );
1635- if (node instanceof BlockStatement ) nodes .add (node );
1630+ if (node instanceof StaticInitializer ) nodes .add ((( StaticInitializer ) node ). getBody () );
16361631 }
16371632 return nodes ;
16381633 }
16391634
16401635 private List <FieldDefinition > getConcreteInstanceFields (ClassBody nd ) {
16411636 List <FieldDefinition > fds = new ArrayList <>();
1642- for (Node node : nd .getBody ()) {
1643- if (!(node instanceof MemberDefinition )) continue ;
1644- MemberDefinition <?> md = (MemberDefinition <?>)node ;
1637+ for (MemberDefinition <?> md : nd .getBody ()) {
16451638 if (md instanceof FieldDefinition && !md .isStatic () && md .isConcrete ())
16461639 fds .add ((FieldDefinition ) md );
16471640 }
0 commit comments