private static boolean allBranchesPresent(IfStatementTree tree) { IfStatementTree lastIfStatement = tree; while (lastIfStatement.elseClause() != null) { StatementTree elseStatement = lastIfStatement.elseClause().statement(); if (elseStatement.is(Kind.IF_STATEMENT)) { lastIfStatement = (IfStatementTree) elseStatement; } else { break; } } return lastIfStatement.elseClause() != null; }
@Nullable private static IfStatementTree getIfStatementWithoutElse(StatementTree statement) { if (statement.is(Kind.IF_STATEMENT) && ((IfStatementTree) statement).elseClause() == null) { return (IfStatementTree) statement; } else { return null; } }
private static boolean isIfStatementWithoutElse(StatementTree statement) { return statement.is(Kind.IF_STATEMENT) && ((IfStatementTree)statement).elseClause() == null; }
private void visitIf(IfStatementTree tree) { scan(tree.condition()); scan(tree.statement()); ElseClauseTree elseClauseTree = tree.elseClause(); if (tree.elseClause() != null && elseClauseTree.statement().is(Kind.IF_STATEMENT)) { visitIf((IfStatementTreeImpl) tree.elseClause().statement()); } else { scan(tree.elseClause()); } }
private List<Tree> collectBranches(IfStatementTree ifStatement) { List<Tree> branches = new ArrayList<>(); branches.add(ifStatement.statement()); ElseClauseTree elseClause = ifStatement.elseClause(); while (elseClause != null) { if (elseClause.statement().is(Kind.IF_STATEMENT)) { IfStatementTree chainedIfStatement = (IfStatementTree) elseClause.statement(); chainedIfStatements.add(chainedIfStatement); branches.add(chainedIfStatement.statement()); elseClause = chainedIfStatement.elseClause(); } else { branches.add(elseClause.statement()); elseClause = null; } } return branches; }
public ElseClauseTree getNextElse(ElseClauseTree elseClause) { return elseClause.statement().is(Kind.IF_STATEMENT) ? ((IfStatementTree) elseClause.statement()).elseClause() : null; } }
private static Set<Tree> getNeverExecutedCode(Tree condition, boolean isTruthy) { Set<Tree> neverExecutedCode = new HashSet<>(); Tree biggestTreeWithSameTruthiness = biggestTreeWithSameTruthiness(condition, isTruthy, neverExecutedCode); Tree parent = CheckUtils.parentIgnoreParentheses(biggestTreeWithSameTruthiness); if (parent.is(Kind.IF_STATEMENT)) { IfStatementTree ifStatementTree = (IfStatementTree) parent; if (isTruthy) { if (ifStatementTree.elseClause() != null) { neverExecutedCode.add(ifStatementTree.elseClause()); } } else { neverExecutedCode.add(ifStatementTree.statement()); } } else if (parent.is(KindSet.LOOP_KINDS) && !isTruthy) { neverExecutedCode.add(((IterationStatementTree) parent).statement()); } else if (parent.is(Kind.CONDITIONAL_EXPRESSION)) { ConditionalExpressionTree conditionalExpressionTree = (ConditionalExpressionTree) parent; neverExecutedCode.add(isTruthy ? conditionalExpressionTree.falseExpression() : conditionalExpressionTree.trueExpression()); } return neverExecutedCode; }
@Override public void visitIfStatement(IfStatementTree tree) { scan(tree.condition()); scan(tree.statement()); scan(tree.elseClause()); }
@Override public void visitIfStatement(IfStatementTree tree) { if (tree.elseClause() == null) { StatementTree innerStatement = tree.statement(); if (isBlockAndContainsOnlyOneIfStatement(innerStatement) || isIfStatementWithoutElse(innerStatement)) { getContext().addIssue(this, tree, "Merge this if statement with the nested one."); } } super.visitIfStatement(tree); }
@Override public void visitIfStatement(IfStatementTree tree) { ExpressionTree condition = tree.condition(); ElseClauseTree elseClause = tree.elseClause(); while (elseClause != null && elseClause.statement().is(Tree.Kind.IF_STATEMENT)) { IfStatementTree ifStatement = (IfStatementTree) elseClause.statement(); if (SyntacticEquivalence.areEquivalent(condition, ifStatement.condition())) { getContext().addIssue(this, ifStatement.condition(), "This branch duplicates the one on line " + ((AstNode) condition).getTokenLine() + "."); } elseClause = ifStatement.elseClause(); } super.visitIfStatement(tree); }
@Override public void visitIfStatement(IfStatementTree tree) { if (tree.elseClause() == null) { IfStatementTree innerIfStatement = getCollapsibleIfStatement(tree.statement()); if (innerIfStatement != null) { IssueLocation primaryLocation = issueLocation(tree, MESSAGE); IssueLocation secondaryLocation = issueLocation(innerIfStatement, SECONDARY_MESSAGE); addIssue(new PreciseIssue(this, primaryLocation).secondary(secondaryLocation)); } } super.visitIfStatement(tree); }
@Override public void visitIfStatement(IfStatementTree tree) { StatementTree implementation = tree.statement(); ElseClauseTree elseClause = tree.elseClause(); while (elseClause != null) { StatementTree implementationToCompare = getImplementationFromElseClause(elseClause); if (SyntacticEquivalence.areEquivalent(implementation, implementationToCompare)) { getContext().addIssue(this, implementationToCompare, "Either merge this branch with the identical one on line \"" + ((AstNode) implementation).getTokenLine() + "\" or change one of the implementations."); break; } elseClause = getNextElse(elseClause); } super.visitIfStatement(tree); }