@Override public void visitForStatement(ForStatementTree tree) { complexity.addComplexityWithNesting(tree.forToken()); tree.init().forEach(this::visit); tree.condition().forEach(this::visit); tree.update().forEach(this::visit); visitWithNesting(tree.statements()); }
@Override public void visitForStatement(ForStatementTree tree) { super.visitForStatement(tree); if (tree.is(Tree.Kind.FOR_STATEMENT)) { checkBlock(tree.statements().get(0), tree.closeParenthesisToken()); } }
@Override public void visitForStatement(ForStatementTree tree) { super.visitForStatement(tree); if (tree.is(Tree.Kind.FOR_STATEMENT)) { checkStatement(tree.statements().get(0), tree.forToken()); } }
@Test public void alternative_syntax() throws Exception { ForStatementTree tree = parse("for (; ;) : endfor ;", PHPLexicalGrammar.FOR_STATEMENT); assertThat(tree.is(Kind.ALTERNATIVE_FOR_STATEMENT)).isTrue(); assertThat(tree.openParenthesisToken().text()).isEqualTo("("); assertThat(tree.init()).hasSize(0); assertThat(tree.condition()).hasSize(0); assertThat(tree.update()).hasSize(0); assertThat(tree.colonToken()).isNotNull(); assertThat(tree.closeParenthesisToken().text()).isEqualTo(")"); assertThat(tree.endforToken()).isNotNull(); assertThat(tree.eosToken()).isNotNull(); assertThat(tree.statements()).hasSize(0); assertThat(tree.eosToken().text()).isEqualTo(";"); } }
@Override public void visitNode(Tree tree) { List<StatementTree> statements = getStatements(tree); for (int i = 0; i < statements.size() - 1; i++) { StatementTree currentStatement = statements.get(i); if (currentStatement.is(Kind.IF_STATEMENT)) { IfStatementTree ifStatement = (IfStatementTree) currentStatement; checkStatement(ifStatement.ifToken(), ifStatement.condition(), getLastStatementOfIf(ifStatement), i, statements); } else if (currentStatement.is(Kind.FOR_STATEMENT)) { ForStatementTree forStatement = (ForStatementTree) currentStatement; checkStatement(forStatement.forToken(), forStatement.closeParenthesisToken(), forStatement.statements().get(0), i, statements); } else if (currentStatement.is(Kind.FOREACH_STATEMENT)) { ForEachStatementTree forStatement = (ForEachStatementTree) currentStatement; checkStatement(forStatement.foreachToken(), forStatement.closeParenthesisToken(), forStatement.statements().get(0), i, statements); } else if (currentStatement.is(Kind.WHILE_STATEMENT)) { WhileStatementTree whileStatement = (WhileStatementTree) currentStatement; checkStatement(whileStatement.whileToken(), whileStatement.condition(), whileStatement.statements().get(0), i, statements); } } }
@Override public void visitForStatement(ForStatementTree tree) { checkIndentation(tree.forToken(), tree.statements()); super.visitForStatement(tree); }
@Override public void visitForStatement(ForStatementTree tree) { //ignore init and update scan(tree.condition()); scan(tree.statements()); }
@Override public void visitForStatement(ForStatementTree tree) { checkControlStructureOpenCurly(tree.closeParenthesisToken(), getOpenCurlyIfBlock(tree.statements())); super.visitForStatement(tree); }
@Override public void visitForStatement(ForStatementTree tree) { incrementComplexity(tree.forToken()); super.visitForStatement(tree); }
private static Set<String> getCounterNames(ForStatementTree forStatement) { Set<String> counterNames = new HashSet<>(); for (ExpressionTree initExpression : forStatement.init()) { if (initExpression.is(Kind.ASSIGNMENT)) { counterNames.add(((AssignmentExpressionTree) initExpression).variable().toString()); } else if (initExpression.is(INCREMENT_DECREMENT)) { counterNames.add(((UnaryExpressionTree) initExpression).expression().toString()); } } return counterNames; }
@Override public void visitForStatement(ForStatementTree tree) { List<ExpressionTree> updates = tree.update().stream() .filter(expression -> updateKind(expression) != UpdateKind.UNKNOWN) .collect(Collectors.toList()); ExpressionTree forCondition = CheckUtils.getForCondition(tree); if (forCondition != null && !updates.isEmpty()) { checkCondition(forCondition, updates); } super.visitForStatement(tree); }
case FOR_STATEMENT: case ALTERNATIVE_FOR_STATEMENT: statements = ((ForStatementTree) tree).statements(); break; case NAMESPACE_STATEMENT:
@Test public void standard_syntax() throws Exception { ForStatementTree tree = parse("for ($a; ; $c, $b) {}", PHPLexicalGrammar.FOR_STATEMENT); assertThat(tree.is(Kind.FOR_STATEMENT)).isTrue(); assertThat(tree.forToken().text()).isEqualTo("for"); assertThat(tree.openParenthesisToken().text()).isEqualTo("("); assertThat(tree.init()).hasSize(1); assertThat(tree.condition()).hasSize(0); assertThat(tree.update()).hasSize(2); assertThat(tree.closeParenthesisToken().text()).isEqualTo(")"); assertThat(tree.colonToken()).isNull(); assertThat(tree.endforToken()).isNull(); assertThat(tree.eosToken()).isNull(); assertThat(tree.statements()).hasSize(1); assertThat(tree.statements().get(0).is(Kind.BLOCK)).isTrue(); assertThat(tree.eosToken()).isNull(); }
@Override public void visitForStatement(ForStatementTree tree) { super.visitForStatement(tree); if (tree.is(Tree.Kind.FOR_STATEMENT)) { checkStatement(tree.statements().get(0), tree.forToken()); } }
@Override public void visitNode(Tree tree) { List<StatementTree> statements = getStatements(tree); for (int i = 0; i < statements.size() - 1; i++) { StatementTree currentStatement = statements.get(i); if (currentStatement.is(Kind.IF_STATEMENT)) { IfStatementTree ifStatement = (IfStatementTree) currentStatement; checkStatement(ifStatement.ifToken(), ifStatement.condition(), getLastStatementOfIf(ifStatement), i, statements); } else if (currentStatement.is(Kind.FOR_STATEMENT)) { ForStatementTree forStatement = (ForStatementTree) currentStatement; checkStatement(forStatement.forToken(), forStatement.closeParenthesisToken(), forStatement.statements().get(0), i, statements); } else if (currentStatement.is(Kind.FOREACH_STATEMENT)) { ForEachStatementTree forStatement = (ForEachStatementTree) currentStatement; checkStatement(forStatement.foreachToken(), forStatement.closeParenthesisToken(), forStatement.statements().get(0), i, statements); } else if (currentStatement.is(Kind.WHILE_STATEMENT)) { WhileStatementTree whileStatement = (WhileStatementTree) currentStatement; checkStatement(whileStatement.whileToken(), whileStatement.condition(), whileStatement.statements().get(0), i, statements); } } }