@Override public void visitSwitchStatement(SwitchStatementTree switchTree) { int numberOfCases = switchTree.cases().size(); if (numberOfCases > max) { context() .newIssue(this, switchTree.switchToken(), String.format("Reduce the number of switch cases from %s to at most %s.", numberOfCases, max)); } super.visitSwitchStatement(switchTree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { checkControlStructureOpenCurly(tree.expression().closeParenthesis(), tree.openCurlyBraceToken()); super.visitSwitchStatement(tree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); if (tree.is(Kind.SWITCH_STATEMENT)) { checkCloseCurlyBrace( tree.closeCurlyBraceToken(), tree.openCurlyBraceToken(), new TokenVisitor(tree).prevToken(tree.closeCurlyBraceToken())); } }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); if (isEmpty(tree.cases(), tree.closeCurlyBraceToken())) { context().newIssue(this, tree.openCurlyBraceToken(), tree.closeCurlyBraceToken(), MESSAGE); } }
@Test public void alternative_syntax() throws Exception { SwitchStatementTree tree = parse("switch ($a) : default : break; endswitch;", PHPLexicalGrammar.SWITCH_STATEMENT); assertThat(tree.is(Kind.ALTERNATIVE_SWITCH_STATEMENT)).isTrue(); assertThat(tree.switchToken().text()).isEqualTo("switch"); assertThat(expressionToString(tree.expression())).isEqualTo("($a)"); assertThat(tree.cases()).hasSize(1); assertThat(tree.colonToken().text()).isEqualTo(":"); assertThat(tree.endswitchToken().text()).isEqualTo("endswitch"); assertThat(tree.eosToken().text()).isEqualTo(";"); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { tree.cases().forEach(this::checkCaseClause); super.visitSwitchStatement(tree); }
private PhpCfgBlock buildSwitchStatement(SwitchStatementTree tree, PhpCfgBlock successor) { ForwardingBlock defaultBlock = createForwardingBlock(); defaultBlock.setSuccessor(successor); PhpCfgBlock nextCase = defaultBlock; PhpCfgBlock caseBody = successor; addBreakable(successor, successor); for (SwitchCaseClauseTree caseTree : Lists.reverse(tree.cases())) { caseBody = buildSubFlow(caseTree.statements(), caseBody); if (caseTree.is(Tree.Kind.CASE_CLAUSE)) { PhpCfgBranchingBlock caseBranch = createBranchingBlock(caseTree, caseBody, nextCase); caseBranch.addElement(((CaseClauseTree) caseTree).expression()); nextCase = caseBranch; } else { // default case defaultBlock.setSuccessor(caseBody); } } removeBreakable(); PhpCfgBlock block = createSimpleBlock(nextCase); block.addElement(tree.expression()); return block; }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { complexity.addComplexityWithNesting(tree.switchToken()); visitWithNesting(()-> super.visitSwitchStatement(tree)); }
@Test public void standard_syntax() throws Exception { SwitchStatementTree tree = parse("switch ($a) { case $a : break; default : break; }", PHPLexicalGrammar.SWITCH_STATEMENT); assertThat(tree.is(Kind.SWITCH_STATEMENT)).isTrue(); assertThat(tree.switchToken().text()).isEqualTo("switch"); assertThat(expressionToString(tree.expression())).isEqualTo("($a)"); assertThat(tree.cases()).hasSize(2); assertThat(tree.colonToken()).isNull(); assertThat(tree.endswitchToken()).isNull(); assertThat(tree.eosToken()).isNull(); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { tree.cases().forEach(this::checkCaseClause); super.visitSwitchStatement(tree); }
private PhpCfgBlock buildSwitchStatement(SwitchStatementTree tree, PhpCfgBlock successor) { ForwardingBlock defaultBlock = createForwardingBlock(); defaultBlock.setSuccessor(successor); PhpCfgBlock nextCase = defaultBlock; PhpCfgBlock caseBody = successor; addBreakable(successor, successor); for (SwitchCaseClauseTree caseTree : Lists.reverse(tree.cases())) { caseBody = buildSubFlow(caseTree.statements(), caseBody); if (caseTree.is(Tree.Kind.CASE_CLAUSE)) { PhpCfgBranchingBlock caseBranch = createBranchingBlock(caseTree, caseBody, nextCase); caseBranch.addElement(((CaseClauseTree) caseTree).expression()); nextCase = caseBranch; } else { // default case defaultBlock.setSuccessor(caseBody); } } removeBreakable(); PhpCfgBlock block = createSimpleBlock(nextCase); block.addElement(tree.expression()); return block; }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); if (isEmpty(tree.cases(), tree.closeCurlyBraceToken())) { context().newIssue(this, tree.openCurlyBraceToken(), tree.closeCurlyBraceToken(), MESSAGE); } }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { complexity.addComplexityWithNesting(tree.switchToken()); visitWithNesting(()-> super.visitSwitchStatement(tree)); }
@Override public void visitSwitchStatement(SwitchStatementTree switchTree) { int numberOfCases = switchTree.cases().size(); if (numberOfCases > max) { context() .newIssue(this, switchTree.switchToken(), String.format("Reduce the number of switch cases from %s to at most %s.", numberOfCases, max)); } super.visitSwitchStatement(switchTree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); if (tree.is(Kind.SWITCH_STATEMENT)) { checkOpenCurlyBrace( tree.openCurlyBraceToken(), tree.closeCurlyBraceToken(), new TokenVisitor(tree).prevToken(tree.openCurlyBraceToken())); } }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { List<SwitchCaseClauseTree> clauses = tree.cases(); if (clauses.size() > 2) { clauses.subList(1, clauses.size() - 1) .stream() .filter(clause -> clause.is(Kind.DEFAULT_CLAUSE)) .forEach(defaultTree -> context().newIssue(this, defaultTree.caseToken(), MESSAGE)); } super.visitSwitchStatement(tree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { enterBlock(tree.switchToken()); super.visitSwitchStatement(tree); leaveBlock(); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { checkControlStructureOpenCurly(tree.expression().closeParenthesis(), tree.openCurlyBraceToken()); super.visitSwitchStatement(tree); }
@Override public void visitSwitchStatement(SwitchStatementTree switchTree) { if (switchTree.cases().size() < 3) { context().newIssue(this, switchTree.switchToken(), "Replace this \"switch\" statement with \"if\" statements to increase readability."); } super.visitSwitchStatement(switchTree); } }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); if (tree.is(Kind.SWITCH_STATEMENT)) { TokenVisitor tokenVisitor = new TokenVisitor(tree); checkOpenCurlyBrace( tree.openCurlyBraceToken(), tree.closeCurlyBraceToken(), tokenVisitor.prevToken(tree.openCurlyBraceToken()), tokenVisitor.nextToken(tree.openCurlyBraceToken())); } }