private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final ControlFlowNode toNode, final JumpType type) { final ControlFlowEdge edge = new ControlFlowEdge(fromNode, toNode, type); 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); 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); 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 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 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 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 reconstructEdges(final ControlFlowNode oldNode, final ControlFlowNode newNode) { for (final ControlFlowEdge oldEdge : oldNode.getOutgoing()) { createEdge(newNode, getNew(oldEdge.getTarget()), oldEdge.getType()); } }
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); } } }
final ControlFlowEdge entryEdge = new ControlFlowEdge(entryPoint, entryNode, JumpType.Normal); entryPoint.getOutgoing().add(entryEdge); entryNode.getIncoming().add(entryEdge); if (!source.getOutgoing().contains(edge)) { source.getOutgoing().add(edge);
final ControlFlowEdge entryEdge = new ControlFlowEdge(entryPoint, entryNode, JumpType.Normal); entryPoint.getOutgoing().add(entryEdge); entryNode.getIncoming().add(entryEdge); if (!source.getOutgoing().contains(edge)) { source.getOutgoing().add(edge);
final ControlFlowEdge entryEdge = new ControlFlowEdge(entryPoint, entryNode, JumpType.Normal); entryPoint.getOutgoing().add(entryEdge); entryNode.getIncoming().add(entryEdge); if (!source.getOutgoing().contains(edge)) { source.getOutgoing().add(edge);
edges.addAll(node.getOutgoing()); edges.addAll(endFinallyNode.getOutgoing());
edges.addAll(node.getOutgoing()); edges.addAll(endFinallyNode.getOutgoing());
edges.addAll(node.getOutgoing()); edges.addAll(endFinallyNode.getOutgoing());
final Instruction end = node.getEnd(); if (end != null && !node.getOutgoing().isEmpty()) { for (final ControlFlowEdge edge : node.getOutgoing()) { if (edge.getType() == JumpType.LeaveTry) { assert end.getOpCode().isBranch(); node.getOutgoing().remove(edge);
final Instruction end = node.getEnd(); if (end != null && !node.getOutgoing().isEmpty()) { for (final ControlFlowEdge edge : node.getOutgoing()) { if (edge.getType() == JumpType.LeaveTry) { assert end.getOpCode().isBranch(); node.getOutgoing().remove(edge);