@Test public void case_clause() throws Exception { CaseClauseTree tree = parse("case $a: $b;", PHPLexicalGrammar.SWITCH_CASE_CLAUSE); assertThat(tree.is(Kind.CASE_CLAUSE)).isTrue(); assertThat(tree.caseToken().text()).isEqualTo("case"); assertThat(tree.expression().is(Kind.VARIABLE_IDENTIFIER)).isTrue(); assertThat(tree.caseSeparatorToken().text()).isEqualTo(":"); assertThat(tree.statements()).hasSize(1); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); List<ExpressionTree> expressions = new ArrayList<>(); for (SwitchCaseClauseTree switchCaseClauseTree : tree.cases()) { if (switchCaseClauseTree.is(Kind.CASE_CLAUSE)) { expressions.add(((CaseClauseTree) switchCaseClauseTree).expression()); } } checkForEquality(expressions, "case"); }
@Override public void visitCaseClause(CaseClauseTree tree) { incrementComplexity(tree.caseToken()); super.visitCaseClause(tree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { super.visitSwitchStatement(tree); List<ExpressionTree> expressions = new ArrayList<>(); for (SwitchCaseClauseTree switchCaseClauseTree : tree.cases()) { if (switchCaseClauseTree.is(Kind.CASE_CLAUSE)) { expressions.add(((CaseClauseTree) switchCaseClauseTree).expression()); } } checkForEquality(expressions, "case"); }
@Override public void visitCaseClause(CaseClauseTree tree) { incrementComplexity(tree.caseToken()); super.visitCaseClause(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; }
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; }