public DefiniteAssignmentAnalysis(final Statement rootStatement, final Function<AstNode, ResolveResult> resolver) { VerifyArgument.notNull(rootStatement, "rootStatement"); VerifyArgument.notNull(resolver, "resolver"); this.resolver = resolver; final DerivedControlFlowGraphBuilder builder = new DerivedControlFlowGraphBuilder(); builder.setEvaluateOnlyPrimitiveConstants(true); for (final ControlFlowNode node : builder.buildControlFlowGraph(rootStatement, resolver)) { allNodes.add((DefiniteAssignmentNode) node); } for (int i = 0; i < allNodes.size(); i++) { final DefiniteAssignmentNode node = allNodes.get(i); node.setIndex(i); if (node.getType() == ControlFlowNodeType.StartNode || node.getType() == ControlFlowNodeType.BetweenStatements) { beginNodeMap.put(node.getNextStatement(), node); } if (node.getType() == ControlFlowNodeType.BetweenStatements || node.getType() == ControlFlowNodeType.EndNode) { endNodeMap.put(node.getPreviousStatement(), node); } if (node.getType() == ControlFlowNodeType.LoopCondition) { conditionNodeMap.put(node.getNextStatement(), node); } } this.analyzedRangeStart = 0; this.analyzedRangeEnd = allNodes.size() - 1; }
public DefiniteAssignmentAnalysis(final Statement rootStatement, final Function<AstNode, ResolveResult> resolver) { VerifyArgument.notNull(rootStatement, "rootStatement"); VerifyArgument.notNull(resolver, "resolver"); this.resolver = resolver; final DerivedControlFlowGraphBuilder builder = new DerivedControlFlowGraphBuilder(); builder.setEvaluateOnlyPrimitiveConstants(true); for (final ControlFlowNode node : builder.buildControlFlowGraph(rootStatement, resolver)) { allNodes.add((DefiniteAssignmentNode) node); } for (int i = 0; i < allNodes.size(); i++) { final DefiniteAssignmentNode node = allNodes.get(i); node.setIndex(i); if (node.getType() == ControlFlowNodeType.StartNode || node.getType() == ControlFlowNodeType.BetweenStatements) { beginNodeMap.put(node.getNextStatement(), node); } if (node.getType() == ControlFlowNodeType.BetweenStatements || node.getType() == ControlFlowNodeType.EndNode) { endNodeMap.put(node.getPreviousStatement(), node); } if (node.getType() == ControlFlowNodeType.LoopCondition) { conditionNodeMap.put(node.getNextStatement(), node); } } this.analyzedRangeStart = 0; this.analyzedRangeEnd = allNodes.size() - 1; }
for (AstNode child = node.getNextStatement().getLastChild(); child != null; child = child.getPreviousSibling()) { insertAnonymousMethods(i + 1, child, builder); node.getType() == ControlFlowNodeType.BetweenStatements) { beginNodeMap.put(node.getNextStatement(), node); conditionNodeMap.put(node.getNextStatement(), node);
case StartNode: case BetweenStatements: { if (!(node.getNextStatement() instanceof IfElseStatement)) { if (inputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { outputStatus = DefiniteAssignmentStatus.DEFINITELY_ASSIGNED; outputStatus = cleanSpecialValues(node.getNextStatement().acceptVisitor(visitor, inputStatus)); if (node.getNextStatement() instanceof ForEachStatement) { final ForEachStatement forEach = (ForEachStatement) node.getNextStatement(); assert node.getNextStatement() instanceof IfElseStatement || node.getNextStatement() instanceof WhileStatement || node.getNextStatement() instanceof DoWhileStatement || node.getNextStatement() instanceof ForStatement; final Expression condition = node.getNextStatement().getChildByRole(Roles.CONDITION);
case StartNode: case BetweenStatements: { if (!(node.getNextStatement() instanceof IfElseStatement)) { if (inputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { outputStatus = DefiniteAssignmentStatus.DEFINITELY_ASSIGNED; outputStatus = cleanSpecialValues(node.getNextStatement().acceptVisitor(visitor, inputStatus)); if (node.getNextStatement() instanceof ForEachStatement) { final ForEachStatement forEach = (ForEachStatement) node.getNextStatement(); assert node.getNextStatement() instanceof IfElseStatement || node.getNextStatement() instanceof WhileStatement || node.getNextStatement() instanceof DoWhileStatement || node.getNextStatement() instanceof ForStatement; final Expression condition = node.getNextStatement().getChildByRole(Roles.CONDITION);
case StartNode: case BetweenStatements: { if (!(node.getNextStatement() instanceof IfElseStatement)) { if (inputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { outputStatus = DefiniteAssignmentStatus.DEFINITELY_ASSIGNED; outputStatus = cleanSpecialValues(node.getNextStatement().acceptVisitor(visitor, inputStatus)); if (node.getNextStatement() instanceof ForEachStatement) { final ForEachStatement forEach = (ForEachStatement) node.getNextStatement(); assert node.getNextStatement() instanceof IfElseStatement || node.getNextStatement() instanceof WhileStatement || node.getNextStatement() instanceof DoWhileStatement || node.getNextStatement() instanceof ForStatement; final Expression condition = node.getNextStatement().getChildByRole(Roles.CONDITION);