@Override public void visitIfStatement(IfStatementTree tree) { if (ifStatementWithoutNesting.contains(tree)) { complexity.addComplexityWithoutNesting(tree.ifToken()); } else { complexity.addComplexityWithNesting(tree.ifToken()); } visit(tree.condition()); visitWithNesting(tree.statements()); tree.elseifClauses().forEach(this::visit); visit(tree.elseClause()); }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); if (tree.is(Tree.Kind.IF_STATEMENT)) { checkBlock(tree.statements().get(0), getLastToken(tree.condition())); } }
private static boolean hasElseOrElseIf(IfStatementTree ifStatement) { return ifStatement.elseClause() != null || !ifStatement.elseifClauses().isEmpty(); }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); if (tree.is(Tree.Kind.IF_STATEMENT)) { checkStatement(tree.statements().get(0), tree.ifToken()); } }
@Test public void standard_syntax_with_else() throws Exception { IfStatementTree tree = parse("if ($a) {} else {}", PHPLexicalGrammar.IF_STATEMENT); assertThat(tree.is(Kind.IF_STATEMENT)).isTrue(); assertThat(tree.ifToken().text()).isEqualTo("if"); assertThat(tree.condition()).isNotNull(); assertThat(tree.statements()).hasSize(1); ElseClauseTree elseClause = tree.elseClause(); assertThat(elseClause).isNotNull(); assertThat(elseClause.is(Kind.ELSE_CLAUSE)).isTrue(); assertThat(elseClause.statements()).hasSize(1); assertThat(tree.elseifClauses()).hasSize(0); assertThat(tree.colonToken()).isNull(); assertThat(tree.endifToken()).isNull(); assertThat(tree.eosToken()).isNull(); }
@Test public void standard_syntax() throws Exception { IfStatementTree tree = parse("if ($a) {}", PHPLexicalGrammar.IF_STATEMENT); assertThat(tree.ifToken().text()).isEqualTo("if"); assertThat(expressionToString(tree.condition())).isEqualTo("($a)"); assertThat(tree.statements()).hasSize(1); assertThat(tree.elseClause()).isNull(); assertThat(tree.elseifClauses()).hasSize(0); assertThat(tree.endifToken()).isNull(); assertThat(tree.eosToken()).isNull(); }
private static StatementTree getLastStatementOfIf(StatementTree statement) { if (!statement.is(Kind.IF_STATEMENT)) { return statement; } List<StatementTree> childStatements; IfStatementTree ifStatement = (IfStatementTree) statement; ElseClauseTree elseClause = ifStatement.elseClause(); List<ElseifClauseTree> elseifClause = ifStatement.elseifClauses(); if (elseClause != null) { childStatements = elseClause.statements(); } else if (!elseifClause.isEmpty()) { childStatements = elseifClause.get(elseifClause.size() - 1).statements(); } else { childStatements = ifStatement.statements(); } return getLastStatementOfIf(childStatements.get(childStatements.size() - 1)); }
@Test public void alternative_syntax_with_else() throws Exception { IfStatementTree tree = parse("if ($a) : elseif ($a) : else : {} {} endif;", PHPLexicalGrammar.IF_STATEMENT); assertThat(tree.is(Kind.ALTERNATIVE_IF_STATEMENT)).isTrue(); assertThat(tree.colonToken()).isNotNull(); assertThat(tree.statements()).hasSize(0); assertThat(tree.elseClause()).isNotNull(); assertThat(tree.elseifClauses()).hasSize(1); assertThat(tree.elseifClauses().get(0).is(Kind.ALTERNATIVE_ELSEIF_CLAUSE)).isTrue(); assertThat(tree.endifToken()).isNotNull(); assertThat(tree.eosToken().text()).isEqualTo(";"); }
@Override public void visitElseClause(ElseClauseTree tree) { super.visitElseClause(tree); if (tree.is(Kind.ELSE_CLAUSE) && tree.statements().get(0).is(Kind.IF_STATEMENT)) { IfStatementTree nestedIf = (IfStatementTree)tree.statements().get(0); if (nestedIf.elseClause() == null && nestedIf.elseifClauses().isEmpty()) { context().newIssue(this, tree.elseToken(), nestedIf.ifToken(), MESSAGE); } } }
protected List<Tree> getClauses(IfStatementTree ifStatement) { Preconditions.checkArgument(ifStatement.is(Kind.IF_STATEMENT)); List<Tree> clauses = new ArrayList<>(); clauses.add(ifStatement); clauses.addAll(ifStatement.elseifClauses()); ElseClauseTree currentElseClause = ifStatement.elseClause(); while (currentElseClause != null) { StatementTree statement = currentElseClause.statements().get(0); if (statement.is(Kind.IF_STATEMENT)) { IfStatementTree nestedIfStatement = (IfStatementTree) statement; clauses.add(nestedIfStatement); checkedIfStatements.add(nestedIfStatement); currentElseClause = nestedIfStatement.elseClause(); } else { clauses.add(currentElseClause); currentElseClause = null; } } return clauses; }
@Override public void visitIfStatement(IfStatementTree tree) { incrementComplexity(tree.ifToken()); super.visitIfStatement(tree); }
@Override public void visitIfStatement(IfStatementTree tree) { checkIndentation(tree.ifToken(), tree.statements()); super.visitIfStatement(tree); }
@Nullable private static StatementTree getSingleNestedStatement(IfStatementTree ifStatement) { if (ifStatement.statements().size() == 1) { StatementTree statement = ifStatement.statements().get(0); if (statement.is(Kind.BLOCK)) { BlockTree blockTree = (BlockTree) statement; if (blockTree.statements().size() == 1) { return blockTree.statements().get(0); } } else { return statement; } } return null; }
@Override public void visitIfStatement(IfStatementTree tree) { if (tree.is(Kind.IF_STATEMENT) && !checkedIfStatements.contains(tree)) { List<ExpressionTree> conditionsList = new ArrayList<>(); for (Tree clause : getClauses(tree)) { if (clause.is(Kind.IF_STATEMENT)) { conditionsList.add(((IfStatementTree) clause).condition()); } else if (clause.is(Kind.ELSEIF_CLAUSE)) { conditionsList.add(((ElseifClauseTree) clause).condition()); } } checkForEquality(conditionsList, "branch"); } super.visitIfStatement(tree); }
private static StatementTree getLastStatementOfIf(StatementTree statement) { if (!statement.is(Kind.IF_STATEMENT)) { return statement; } List<StatementTree> childStatements; IfStatementTree ifStatement = (IfStatementTree) statement; ElseClauseTree elseClause = ifStatement.elseClause(); List<ElseifClauseTree> elseifClause = ifStatement.elseifClauses(); if (elseClause != null) { childStatements = elseClause.statements(); } else if (!elseifClause.isEmpty()) { childStatements = elseifClause.get(elseifClause.size() - 1).statements(); } else { childStatements = ifStatement.statements(); } return getLastStatementOfIf(childStatements.get(childStatements.size() - 1)); }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); if (tree.is(Tree.Kind.IF_STATEMENT)) { checkStatement(tree.statements().get(0), tree.ifToken()); } }
@Override public void visitElseClause(ElseClauseTree tree) { super.visitElseClause(tree); if (tree.is(Kind.ELSE_CLAUSE) && tree.statements().get(0).is(Kind.IF_STATEMENT)) { IfStatementTree nestedIf = (IfStatementTree)tree.statements().get(0); if (nestedIf.elseClause() == null && nestedIf.elseifClauses().isEmpty()) { context().newIssue(this, tree.elseToken(), nestedIf.ifToken(), MESSAGE); } } }
private static boolean hasElseOrElseIf(IfStatementTree ifStatement) { return ifStatement.elseClause() != null || !ifStatement.elseifClauses().isEmpty(); }