@SuppressWarnings("UnusedParameters") private void createReturnControlFlow(final ControlFlowNode node, final Instruction end) { // final ControlFlowNode handlerNode = findInnermostHandlerBlock(end.getOffset()); // final ControlFlowNode finallyNode; // // if (handlerNode.getNodeType() == ControlFlowNodeType.CatchHandler) { // finallyNode = findInnermostFinallyHandlerNode( // handlerNode.getExceptionHandler().getTryBlock().getLastInstruction().getOffset() // ); // } // else if (handlerNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // finallyNode = handlerNode; // } // else { // finallyNode = _exceptionalExit; // } // // if (finallyNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // createEdge(node, _regularExit, JumpType.LeaveTry); // } // else { createEdge(node, _regularExit, JumpType.Normal); // } }
@SuppressWarnings("UnusedParameters") private void createReturnControlFlow(final ControlFlowNode node, final Instruction end) { // final ControlFlowNode handlerNode = findInnermostHandlerBlock(end.getOffset()); // final ControlFlowNode finallyNode; // // if (handlerNode.getNodeType() == ControlFlowNodeType.CatchHandler) { // finallyNode = findInnermostFinallyHandlerNode( // handlerNode.getExceptionHandler().getTryBlock().getLastInstruction().getOffset() // ); // } // else if (handlerNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // finallyNode = handlerNode; // } // else { // finallyNode = _exceptionalExit; // } // // if (finallyNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // createEdge(node, _regularExit, JumpType.LeaveTry); // } // else { createEdge(node, _regularExit, JumpType.Normal); // } }
@SuppressWarnings("UnusedParameters") private void createReturnControlFlow(final ControlFlowNode node, final Instruction end) { // final ControlFlowNode handlerNode = findInnermostHandlerBlock(end.getOffset()); // final ControlFlowNode finallyNode; // // if (handlerNode.getNodeType() == ControlFlowNodeType.CatchHandler) { // finallyNode = findInnermostFinallyHandlerNode( // handlerNode.getExceptionHandler().getTryBlock().getLastInstruction().getOffset() // ); // } // else if (handlerNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // finallyNode = handlerNode; // } // else { // finallyNode = _exceptionalExit; // } // // if (finallyNode.getNodeType() == ControlFlowNodeType.FinallyHandler) { // createEdge(node, _regularExit, JumpType.LeaveTry); // } // else { createEdge(node, _regularExit, JumpType.Normal); // } }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final Instruction toInstruction, final JumpType type) { ControlFlowNode target = null; for (final ControlFlowNode node : _nodes) { if (node.getStart() != null && node.getStart().getOffset() == toInstruction.getOffset()) { if (target != null) { throw new IllegalStateException("Multiple edge targets detected!"); } target = node; } } if (target != null) { return createEdge(fromNode, target, type); } throw new IllegalStateException("Could not find target node!"); }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final Instruction toInstruction, final JumpType type) { ControlFlowNode target = null; for (final ControlFlowNode node : _nodes) { if (node.getStart() != null && node.getStart().getOffset() == toInstruction.getOffset()) { if (target != null) { throw new IllegalStateException("Multiple edge targets detected!"); } target = node; } } if (target != null) { return createEdge(fromNode, target, type); } throw new IllegalStateException("Could not find target node!"); }
private ControlFlowEdge createEdge(final ControlFlowNode fromNode, final Instruction toInstruction, final JumpType type) { ControlFlowNode target = null; for (final ControlFlowNode node : _nodes) { if (node.getStart() != null && node.getStart().getOffset() == toInstruction.getOffset()) { if (target != null) { throw new IllegalStateException("Multiple edge targets detected!"); } target = node; } } if (target != null) { return createEdge(fromNode, target, type); } throw new IllegalStateException("Could not find target node!"); }
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); } } }
createEdge(node, target, JumpType.Normal); return; createEdge(node, target, JumpType.LeaveTry); createEdge(node, target, JumpType.Normal); createEdge(node, target, JumpType.LeaveTry); !parentHandler.getExceptionHandler().getTryBlock().contains(target)) { createEdge(node, target, JumpType.LeaveTry); createEdge(node, handlerNode.getEndFinallyNode(), JumpType.Normal); createEdge(handlerNode.getEndFinallyNode(), target, JumpType.Normal); createEdge(node, target, JumpType.Normal);
createEdge(node, target, JumpType.Normal); return; createEdge(node, target, JumpType.LeaveTry); createEdge(node, target, JumpType.Normal); createEdge(node, target, JumpType.LeaveTry); !parentHandler.getExceptionHandler().getTryBlock().contains(target)) { createEdge(node, target, JumpType.LeaveTry); createEdge(node, handlerNode.getEndFinallyNode(), JumpType.Normal); createEdge(handlerNode.getEndFinallyNode(), target, JumpType.Normal); createEdge(node, target, JumpType.Normal);
createEdge(_entryPoint, instructions.get(0), JumpType.Normal); createEdge(node, next, JumpType.Normal); final SwitchInfo switchInfo = instruction.getOperand(0); createEdge(node, switchInfo.getDefaultTarget(), JumpType.Normal); createEdge(node, target, JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.LeaveTry);
createEdge(_entryPoint, instructions.get(0), JumpType.Normal); createEdge(node, next, JumpType.Normal); final SwitchInfo switchInfo = instruction.getOperand(0); createEdge(node, switchInfo.getDefaultTarget(), JumpType.Normal); createEdge(node, target, JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.LeaveTry);
createEdge(_entryPoint, instructions.get(0), JumpType.Normal); createEdge(node, next, JumpType.Normal); final SwitchInfo switchInfo = instruction.getOperand(0); createEdge(node, switchInfo.getDefaultTarget(), JumpType.Normal); createEdge(node, target, JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, handlerBlock.getEndFinallyNode(), JumpType.LeaveTry);
createEdge(node, target, JumpType.Normal); return; createEdge(node, target, JumpType.LeaveTry); createEdge(node, target, JumpType.Normal); createEdge(node, target, JumpType.LeaveTry); !parentHandler.getExceptionHandler().getTryBlock().contains(target)) { createEdge(node, target, JumpType.LeaveTry); createEdge(node, handlerNode.getEndFinallyNode(), JumpType.Normal); createEdge(handlerNode.getEndFinallyNode(), target, JumpType.Normal); createEdge(node, target, JumpType.Normal);
createEdge(node, finallyBlock, JumpType.Normal); continue; createEdge(node, finallyBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, finallyBlock, JumpType.Normal); createEdge(finallyBlock.getEndFinallyNode(), parentHandler, JumpType.EndFinally); createEdge(finallyBlock.getEndFinallyNode(), target, JumpType.EndFinally); createEdge( findNode(finallyBlock.getExceptionHandler().getHandlerBlock().getLastInstruction()), finallyBlock.getEndFinallyNode(),
createEdge(node, finallyBlock, JumpType.Normal); continue; createEdge(node, finallyBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, finallyBlock, JumpType.Normal); createEdge(finallyBlock.getEndFinallyNode(), parentHandler, JumpType.EndFinally); createEdge(finallyBlock.getEndFinallyNode(), target, JumpType.EndFinally); createEdge( findNode(finallyBlock.getExceptionHandler().getHandlerBlock().getLastInstruction()), finallyBlock.getEndFinallyNode(),
createEdge(node, finallyBlock, JumpType.Normal); continue; createEdge(node, finallyBlock.getEndFinallyNode(), JumpType.Normal); createEdge(node, finallyBlock, JumpType.Normal); createEdge(finallyBlock.getEndFinallyNode(), parentHandler, JumpType.EndFinally); createEdge(finallyBlock.getEndFinallyNode(), target, JumpType.EndFinally); createEdge( findNode(finallyBlock.getExceptionHandler().getHandlerBlock().getLastInstruction()), finallyBlock.getEndFinallyNode(),
createEdge(node, finallyBlock, JumpType.JumpToExceptionHandler); createEdge(node, handlerNode, JumpType.JumpToExceptionHandler); createEdge(node, finallyBlock, JumpType.JumpToExceptionHandler); createEdge( node, handlerBlock, ); createEdge( node, adjacentFinally != null ? adjacentFinally : findParentExceptionHandlerNode(node), createEdge( node, exceptionHandler.getHandlerBlock().getFirstInstruction(),
createEdge(node, finallyBlock, JumpType.JumpToExceptionHandler); createEdge(node, handlerNode, JumpType.JumpToExceptionHandler); createEdge(node, finallyBlock, JumpType.JumpToExceptionHandler); createEdge( node, handlerBlock, ); createEdge( node, adjacentFinally != null ? adjacentFinally : findParentExceptionHandlerNode(node), createEdge( node, exceptionHandler.getHandlerBlock().getFirstInstruction(),