if (end == null || end.getOffset() >= _instructions.get(_instructions.size() - 1).getEndOffset()) {
continue;
}
final OpCode endOpCode = end.getOpCode();
//
// Create normal edges from one instruction to the next.
//
if (!endOpCode.isUnconditionalBranch()) {
final Instruction next = end.getNext();
if (next != null) {
createEdge(node, next, JumpType.Normal);
}
}
//
// Create edges for branch instructions.
//
for (Instruction instruction = node.getStart();
instruction != null && instruction.getOffset() <= end.getOffset();
instruction = instruction.getNext()) {
final OpCode opCode = instruction.getOpCode();
if (opCode.getOperandType() == OperandType.BranchTarget) {
final ControlFlowNode handlerBlock = findInnermostHandlerBlock(node.getEnd().getOffset());
if (handlerBlock.getNodeType() == ControlFlowNodeType.FinallyHandler) {
createEdge(node, instruction.<Instruction>getOperand(0), JumpType.LeaveTry);
}
else {
createEdge(node, instruction.<Instruction>getOperand(0), JumpType.Normal);
}
}
else if (opCode.getOperandType() == OperandType.Switch) {
final SwitchInfo switchInfo = instruction.getOperand(0);
createEdge(node, switchInfo.getDefaultTarget(), JumpType.Normal);
for (final Instruction target : switchInfo.getTargets()) {