private static boolean isEmpty(SwitchCaseClauseTree caseClause) { return caseClause.statements().isEmpty(); }
private static boolean isEmpty(SwitchCaseClauseTree caseClause) { return caseClause.statements().isEmpty(); }
private static boolean hasJumpStatement(SwitchCaseClauseTree caseClause) { List<StatementTree> statements = caseClause.statements(); if (statements.get(statements.size() - 1).is(Kind.BREAK_STATEMENT)) { return true; } return JumpStatementFinder.hasJumpStatement(caseClause); }
private static boolean hasJumpStatement(SwitchCaseClauseTree caseClause) { List<StatementTree> statements = caseClause.statements(); if (statements.get(statements.size() - 1).is(Kind.BREAK_STATEMENT)) { return true; } return JumpStatementFinder.hasJumpStatement(caseClause); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { List<List<StatementTree>> normalizedBranches = new ArrayList<>(); boolean hasDefault = false; boolean hasFallthrough = false; int lastIndex = tree.cases().size() - 1; for (int i = 0; i < tree.cases().size(); i++) { SwitchCaseClauseTree switchCaseClause = tree.cases().get(i); List<StatementTree> statements = switchCaseClause.statements(); if (switchCaseClause.is(Kind.DEFAULT_CLAUSE)) { hasDefault = true; } if (!statements.isEmpty()) { normalizedBranches.add(normalize(statements)); if (i != lastIndex && !endsWithBreak(statements)) { hasFallthrough = true; } } } if (!normalizedBranches.isEmpty()) { // we don't want to report all duplicate branches for "switch" without "default" // this means that in some case (no 'case' was matched) nothing will be done // same for "switch" with fallthrough, some branches will be fallen through, thus not identical boolean reportAllDuplicate = hasDefault && !hasFallthrough; checkBranches("case", normalizedBranches, reportAllDuplicate, tree.switchToken()); } super.visitSwitchStatement(tree); }
@Override public void visitSwitchStatement(SwitchStatementTree tree) { List<List<StatementTree>> normalizedBranches = new ArrayList<>(); boolean hasDefault = false; boolean hasFallthrough = false; int lastIndex = tree.cases().size() - 1; for (int i = 0; i < tree.cases().size(); i++) { SwitchCaseClauseTree switchCaseClause = tree.cases().get(i); List<StatementTree> statements = switchCaseClause.statements(); if (switchCaseClause.is(Kind.DEFAULT_CLAUSE)) { hasDefault = true; } if (!statements.isEmpty()) { normalizedBranches.add(normalize(statements)); if (i != lastIndex && !endsWithBreak(statements)) { hasFallthrough = true; } } } if (!normalizedBranches.isEmpty()) { // we don't want to report all duplicate branches for "switch" without "default" // this means that in some case (no 'case' was matched) nothing will be done // same for "switch" with fallthrough, some branches will be fallen through, thus not identical boolean reportAllDuplicate = hasDefault && !hasFallthrough; checkBranches("case", normalizedBranches, reportAllDuplicate, tree.switchToken()); } 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; }
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; }
case CASE_CLAUSE: case DEFAULT_CLAUSE: statements = ((SwitchCaseClauseTree) tree).statements(); break; case DECLARE_STATEMENT:
case CASE_CLAUSE: case DEFAULT_CLAUSE: statements = ((SwitchCaseClauseTree) tree).statements(); break; case DECLARE_STATEMENT: