private void reconstructEdges(final ControlFlowNode oldNode, final ControlFlowNode newNode) { for (final ControlFlowEdge oldEdge : oldNode.getOutgoing()) { createEdge(newNode, getNew(oldEdge.getTarget()), oldEdge.getType()); } }
private void reconstructEdges(final ControlFlowNode oldNode, final ControlFlowNode newNode) { for (final ControlFlowEdge oldEdge : oldNode.getOutgoing()) { createEdge(newNode, getNew(oldEdge.getTarget()), oldEdge.getType()); } }
private void reconstructEdges(final ControlFlowNode oldNode, final ControlFlowNode newNode) { for (final ControlFlowEdge oldEdge : oldNode.getOutgoing()) { createEdge(newNode, getNew(oldEdge.getTarget()), oldEdge.getType()); } }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final ControlFlowNode toNode, final JumpType type) { final ControlFlowEdge edge = new ControlFlowEdge(fromNode, toNode, type); for (final ControlFlowEdge existingEdge : fromNode.getOutgoing()) { if (existingEdge.getSource() == fromNode && existingEdge.getTarget() == toNode && existingEdge.getType() == type) { return existingEdge; } } fromNode.getOutgoing().add(edge); toNode.getIncoming().add(edge); return edge; }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final ControlFlowNode toNode, final JumpType type) { final ControlFlowEdge edge = new ControlFlowEdge(fromNode, toNode, type); for (final ControlFlowEdge existingEdge : fromNode.getOutgoing()) { if (existingEdge.getSource() == fromNode && existingEdge.getTarget() == toNode && existingEdge.getType() == type) { return existingEdge; } } fromNode.getOutgoing().add(edge); toNode.getIncoming().add(edge); return edge; }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final ControlFlowNode toNode, final JumpType type) { final ControlFlowEdge edge = new ControlFlowEdge(fromNode, toNode, type); for (final ControlFlowEdge existingEdge : fromNode.getOutgoing()) { if (existingEdge.getSource() == fromNode && existingEdge.getTarget() == toNode && existingEdge.getType() == type) { return existingEdge; } } fromNode.getOutgoing().add(edge); toNode.getIncoming().add(edge); return edge; }
private void copyFinallyBlocksIntoLeaveEdges() { // // Step 5b: Copy finally blocks into the LeaveTry edges. // for (int n = _nodes.size(), i = n - 1; i >= 0; i--) { final ControlFlowNode node = _nodes.get(i); final Instruction end = node.getEnd(); if (end != null && node.getOutgoing().size() == 1 && node.getOutgoing().get(0).getType() == JumpType.LeaveTry) { assert end.getOpCode() == OpCode.GOTO || end.getOpCode() == OpCode.GOTO_W; final ControlFlowEdge edge = node.getOutgoing().get(0); final ControlFlowNode target = edge.getTarget(); target.getIncoming().remove(edge); node.getOutgoing().clear(); final ControlFlowNode handler = findInnermostExceptionHandlerNode(end.getEndOffset()); assert handler.getNodeType() == ControlFlowNodeType.FinallyHandler; final ControlFlowNode copy = copyFinallySubGraph(handler, handler.getEndFinallyNode(), target); createEdge(node, copy, JumpType.Normal); } } }
private void copyFinallyBlocksIntoLeaveEdges() { // // Step 5b: Copy finally blocks into the LeaveTry edges. // for (int n = _nodes.size(), i = n - 1; i >= 0; i--) { final ControlFlowNode node = _nodes.get(i); final Instruction end = node.getEnd(); if (end != null && node.getOutgoing().size() == 1 && node.getOutgoing().get(0).getType() == JumpType.LeaveTry) { assert end.getOpCode() == OpCode.GOTO || end.getOpCode() == OpCode.GOTO_W; final ControlFlowEdge edge = node.getOutgoing().get(0); final ControlFlowNode target = edge.getTarget(); target.getIncoming().remove(edge); node.getOutgoing().clear(); final ControlFlowNode handler = findInnermostExceptionHandlerNode(end.getEndOffset()); assert handler.getNodeType() == ControlFlowNodeType.FinallyHandler; final ControlFlowNode copy = copyFinallySubGraph(handler, handler.getEndFinallyNode(), target); createEdge(node, copy, JumpType.Normal); } } }
private void copyFinallyBlocksIntoLeaveEdges() { // // Step 5b: Copy finally blocks into the LeaveTry edges. // for (int n = _nodes.size(), i = n - 1; i >= 0; i--) { final ControlFlowNode node = _nodes.get(i); final Instruction end = node.getEnd(); if (end != null && node.getOutgoing().size() == 1 && node.getOutgoing().get(0).getType() == JumpType.LeaveTry) { assert end.getOpCode() == OpCode.GOTO || end.getOpCode() == OpCode.GOTO_W; final ControlFlowEdge edge = node.getOutgoing().get(0); final ControlFlowNode target = edge.getTarget(); target.getIncoming().remove(edge); node.getOutgoing().clear(); final ControlFlowNode handler = findInnermostExceptionHandlerNode(end.getEndOffset()); assert handler.getNodeType() == ControlFlowNodeType.FinallyHandler; final ControlFlowNode copy = copyFinallySubGraph(handler, handler.getEndFinallyNode(), target); createEdge(node, copy, JumpType.Normal); } } }
if (edge.getType() == JumpType.Normal && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && !exitOnlySuccessors.contains(successor)) { else if (edge.getType() == JumpType.JumpToExceptionHandler && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && (edge.getSource().getEnd().getOpCode().isThrow() ||
if (edge.getType() == JumpType.Normal && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && !exitOnlySuccessors.contains(successor)) { else if (edge.getType() == JumpType.JumpToExceptionHandler && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && (edge.getSource().getEnd().getOpCode().isThrow() ||
if (edge.getType() == JumpType.Normal && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && !exitOnlySuccessors.contains(successor)) { else if (edge.getType() == JumpType.JumpToExceptionHandler && edge.getSource().getNodeType() == ControlFlowNodeType.Normal && (edge.getSource().getEnd().getOpCode().isThrow() ||
if (edge.getType() == JumpType.LeaveTry) { assert end.getOpCode().isBranch();
if (edge.getType() == JumpType.LeaveTry) { assert end.getOpCode().isBranch();
if (edge.getType() == JumpType.LeaveTry) { assert end.getOpCode().isBranch();