private static boolean hasElseOrElseIf(IfStatementTree ifStatement) { return ifStatement.elseClause() != null || !ifStatement.elseifClauses().isEmpty(); }
private static boolean hasElseOrElseIf(IfStatementTree ifStatement) { return ifStatement.elseClause() != null || !ifStatement.elseifClauses().isEmpty(); }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); List<ElseifClauseTree> elseifClauses = tree.elseifClauses(); if (!elseifClauses.isEmpty() && tree.elseClause() == null) { ElseifClauseTree lastElseIf = elseifClauses.get(elseifClauses.size() - 1); context().newIssue(this, lastElseIf.elseifToken(), MESSAGE); } }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); List<ElseifClauseTree> elseifClauses = tree.elseifClauses(); if (!elseifClauses.isEmpty() && tree.elseClause() == null) { ElseifClauseTree lastElseIf = elseifClauses.get(elseifClauses.size() - 1); context().newIssue(this, lastElseIf.elseifToken(), MESSAGE); } }
private void scanIf(IfStatementTree ifTree) { scan(ifTree.statements()); scan(ifTree.elseifClauses()); ElseClauseTree elseClause = ifTree.elseClause(); if (elseClause != null) { List<StatementTree> elseStatements = elseClause.statements(); if (elseStatements.size() == 1 && elseStatements.get(0).is(Kind.IF_STATEMENT)) { scanIf((IfStatementTree) elseStatements.get(0)); } else { scan(elseClause); } } }
private void scanIf(IfStatementTree ifTree) { scan(ifTree.statements()); scan(ifTree.elseifClauses()); ElseClauseTree elseClause = ifTree.elseClause(); if (elseClause != null) { List<StatementTree> elseStatements = elseClause.statements(); if (elseStatements.size() == 1 && elseStatements.get(0).is(Kind.IF_STATEMENT)) { scanIf((IfStatementTree) elseStatements.get(0)); } else { scan(elseClause); } } }
@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()); }
private PhpCfgBlock buildIfStatement(IfStatementTree tree, PhpCfgBlock successor) { PhpCfgBlock falseBlock = successor; if (tree.elseClause() != null) { falseBlock = buildSubFlow(tree.elseClause().statements(), successor); } if (!tree.elseifClauses().isEmpty()) { for (ElseifClauseTree elseifClause : Lists.reverse(tree.elseifClauses())) { falseBlock = buildElseIfStatement(elseifClause, successor, falseBlock); } } PhpCfgBlock trueBlock = buildSubFlow(tree.statements(), successor); PhpCfgBranchingBlock conditionBlock = createBranchingBlock(tree, trueBlock, falseBlock); conditionBlock.addElement(tree.condition().expression()); return conditionBlock; }
@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); } } }
@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); } } }
@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()); }
private PhpCfgBlock buildIfStatement(IfStatementTree tree, PhpCfgBlock successor) { PhpCfgBlock falseBlock = successor; if (tree.elseClause() != null) { falseBlock = buildSubFlow(tree.elseClause().statements(), successor); } if (!tree.elseifClauses().isEmpty()) { for (ElseifClauseTree elseifClause : Lists.reverse(tree.elseifClauses())) { falseBlock = buildElseIfStatement(elseifClause, successor, falseBlock); } } PhpCfgBlock trueBlock = buildSubFlow(tree.statements(), successor); PhpCfgBranchingBlock conditionBlock = createBranchingBlock(tree, trueBlock, falseBlock); conditionBlock.addElement(tree.condition().expression()); return conditionBlock; }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); if (!tree.elseifClauses().isEmpty() || tree.elseClause() == null) { return; } if (returnsBoolean(getSingleStatement(tree.statements())) && returnsBoolean(getSingleStatement(tree.elseClause().statements()))) { context().newIssue(this, tree.ifToken(), tree.condition(), MESSAGE); } }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); if (!tree.elseifClauses().isEmpty() || tree.elseClause() == null) { return; } if (returnsBoolean(getSingleStatement(tree.statements())) && returnsBoolean(getSingleStatement(tree.elseClause().statements()))) { context().newIssue(this, tree.ifToken(), tree.condition(), MESSAGE); } }
@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(";"); }
@Test public void elseif_syntax() throws Exception { IfStatementTree tree = parse("if ($a) {} elseif ($b) {} elseif ($c) {} else {}", PHPLexicalGrammar.IF_STATEMENT); assertThat(tree.statements()).hasSize(1); assertThat(tree.elseClause()).isNotNull(); assertThat(tree.elseifClauses()).hasSize(2); }
@Override public void visitIfStatement(IfStatementTree tree) { checkControlStructureOpenCurly(tree.condition().closeParenthesis(), getOpenCurlyIfBlock(tree.statements())); // Check else keyword ElseClauseTree elseClause = tree.elseClause(); if (elseClause != null) { checkCloseCurlyNextToKeyword(new TokenVisitor(tree).prevToken(elseClause.elseToken()), elseClause.elseToken()); } tree.elseifClauses().stream() .map(ElseifClauseTree::elseifToken) .forEach(elseIfClause -> checkCloseCurlyNextToKeyword(new TokenVisitor(tree).prevToken(elseIfClause), elseIfClause)); super.visitIfStatement(tree); }
@Override public void visitIfStatement(IfStatementTree tree) { checkControlStructureOpenCurly(tree.condition().closeParenthesis(), getOpenCurlyIfBlock(tree.statements())); // Check else keyword ElseClauseTree elseClause = tree.elseClause(); if (elseClause != null) { checkCloseCurlyNextToKeyword(new TokenVisitor(tree).prevToken(elseClause.elseToken()), elseClause.elseToken()); } tree.elseifClauses().stream() .map(ElseifClauseTree::elseifToken) .forEach(elseIfClause -> checkCloseCurlyNextToKeyword(new TokenVisitor(tree).prevToken(elseIfClause), elseIfClause)); super.visitIfStatement(tree); }
@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(); }
@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(); }