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; }
node.getType() == ControlFlowNodeType.EndNode) { endNodeMap.put(node.getPreviousStatement(), node);
outputStatus = inputStatus; if (node.getPreviousStatement().getRole() == TryCatchStatement.FINALLY_BLOCK_ROLE && (outputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED || outputStatus == DefiniteAssignmentStatus.POTENTIALLY_ASSIGNED)) { final TryCatchStatement tryFinally = (TryCatchStatement) node.getPreviousStatement().getParent();
outputStatus = inputStatus; if (node.getPreviousStatement().getRole() == TryCatchStatement.FINALLY_BLOCK_ROLE && (outputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED || outputStatus == DefiniteAssignmentStatus.POTENTIALLY_ASSIGNED)) { final TryCatchStatement tryFinally = (TryCatchStatement) node.getPreviousStatement().getParent();
outputStatus = inputStatus; if (node.getPreviousStatement().getRole() == TryCatchStatement.FINALLY_BLOCK_ROLE && (outputStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED || outputStatus == DefiniteAssignmentStatus.POTENTIALLY_ASSIGNED)) { final TryCatchStatement tryFinally = (TryCatchStatement) node.getPreviousStatement().getParent();