@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.METHOD_INVOCATION)) { super.visitNode(tree); } else if(tree.is(Tree.Kind.FOR_STATEMENT)) { ForStatementTree fst = (ForStatementTree) tree; inWhileLoop.push(fst.initializer().isEmpty() && fst.condition()==null && fst.update().isEmpty()); } else { inWhileLoop.push(true); } }
@Override public void visitForStatement(ForStatementTree tree) { Set<String> pendingLoopCounters = Sets.newHashSet(); for (StatementTree statementTree : tree.initializer()) { if (statementTree.is(Tree.Kind.VARIABLE)) { pendingLoopCounters.add(((VariableTree) statementTree).simpleName().name()); } } scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); loopCounters.addAll(pendingLoopCounters); scan(tree.statement()); loopCounters.removeAll(pendingLoopCounters); }
@Override public void visitForStatement(ForStatementTree tree) { Set<String> pendingLoopCounters = Sets.newHashSet(); for (StatementTree statementTree : tree.initializer()) { if (statementTree.is(Tree.Kind.VARIABLE)) { pendingLoopCounters.add(((VariableTree) statementTree).simpleName().name()); } } scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); loopCounters.addAll(pendingLoopCounters); scan(tree.statement()); loopCounters.removeAll(pendingLoopCounters); }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.METHOD_INVOCATION)) { super.visitNode(tree); } else if (tree.is(Tree.Kind.FOR_STATEMENT)) { ForStatementTree fst = (ForStatementTree) tree; inWhileLoop.push(fst.initializer().isEmpty() && fst.condition() == null && fst.update().isEmpty()); } else { inWhileLoop.push(true); } }
@Override public void visitForStatement(ForStatementTree tree) { statements++; super.visitForStatement(tree); removeVariable(tree.initializer()); removeVariable(tree.update()); }
@Override public void visitForStatement(ForStatementTree tree) { statements++; super.visitForStatement(tree); removeVariable(tree.initializer()); removeVariable(tree.update()); }
@Override public void visitForStatement(ForStatementTree tree) { statements++; super.visitForStatement(tree); removeVariable(tree.initializer()); removeVariable(tree.update()); }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.METHOD_INVOCATION)) { super.visitNode(tree); } else if (tree.is(Tree.Kind.FOR_STATEMENT)) { ForStatementTree fst = (ForStatementTree) tree; inWhileLoop.push(fst.initializer().isEmpty() && fst.condition() == null && fst.update().isEmpty()); } else { inWhileLoop.push(true); } }
@Override public void visitForStatement(ForStatementTree tree) { statements++; super.visitForStatement(tree); removeVariable(tree.initializer()); removeVariable(tree.update()); }
private static boolean isForStatementInitializer(Tree lastElement, Tree loop) { if (loop.is(Tree.Kind.FOR_STATEMENT)) { return isDescendant(lastElement, ((ForStatementTree) loop).initializer()); } return loop.is(Tree.Kind.FOR_EACH_STATEMENT) && isDescendant(lastElement, ((ForEachStatement) loop).expression()); }
private static boolean isForStatementInitializer(Tree lastElement, Tree loop) { if (loop.is(Tree.Kind.FOR_STATEMENT)) { return isDescendant(lastElement, ((ForStatementTree) loop).initializer()); } return loop.is(Tree.Kind.FOR_EACH_STATEMENT) && isDescendant(lastElement, ((ForEachStatement) loop).expression()); }
@Override public void visitNode(Tree tree) { ForStatementTree forStatementTree = (ForStatementTree) tree; if (forStatementTree.initializer().isEmpty() && forStatementTree.update().isEmpty() && forStatementTree.condition() != null) { context.reportIssue(this, forStatementTree.forKeyword(), "Replace this \"for\" loop with a \"while\" loop."); } } }
@Override public void visitNode(Tree tree) { ForStatementTree forStatementTree = (ForStatementTree) tree; if (forStatementTree.initializer().isEmpty() && forStatementTree.update().isEmpty() && forStatementTree.condition() != null) { context.reportIssue(this, forStatementTree.forKeyword(), "Replace this \"for\" loop with a \"while\" loop."); } } }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); scan(tree.statement()); }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.condition()); scan(tree.initializer()); scan(tree.update()); visitStatement(tree.statement()); }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); scan(tree.statement()); }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); scan(tree.statement()); }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.initializer()); scan(tree.condition()); scan(tree.update()); scan(tree.statement()); }
@Override public void visitForStatement(ForStatementTree tree) { addKind(tree.forKeyword(), UastNode.Kind.FOR_KEYWORD); addKind(tree.initializer(), UastNode.Kind.FOR_INIT); addKind(tree.update(), UastNode.Kind.FOR_UPDATE); addKind(tree.statement(), UastNode.Kind.BODY); super.visitForStatement(tree); }
@Override public void visitForStatement(ForStatementTree tree) { scan(tree.initializer()); ConditionalState conditionalState = visitCondition(tree.condition()); Set<VariableSymbol> assignedVariables = new AssignmentVisitor().findAssignedVariables(tree.statement()); assignedVariables.addAll(new AssignmentVisitor().findAssignedVariables(tree.update())); currentState = conditionalState.trueState; currentState.invalidateVariables(assignedVariables); scan(tree.statement()); scan(tree.update()); restorePreviousState(); currentState.invalidateVariables(assignedVariables); }