int (ControlFlow controlFlow, PsiIfStatement ifStatement) { int endOffset = -1; List<Instruction> instructions = controlFlow.getInstructions(); for (int i = 0; i < instructions.size(); i++) { Instruction instruction = instructions.get(i); if (controlFlow.getElement(i) != ifStatement) continue; if (instruction instanceof GoToInstruction) { GoToInstruction goToInstruction = (GoToInstruction)instruction; if (goToInstruction.role != BranchingInstruction.Role.END) continue; endOffset = goToInstruction.offset; break; } else if (instruction instanceof ConditionalGoToInstruction) { ConditionalGoToInstruction goToInstruction = (ConditionalGoToInstruction)instruction; if (goToInstruction.role != BranchingInstruction.Role.END) continue; endOffset = goToInstruction.offset; break; } } if (endOffset == -1) { endOffset = controlFlow.getSize(); } while (endOffset < instructions.size() && instructions.get(endOffset) instanceof GoToInstruction && !((GoToInstruction) instructions.get(endOffset)).isReturn && !(controlFlow.getElement(endOffset) instanceof PsiYieldStatement) && !(controlFlow.getElement(endOffset) instanceof PsiBreakStatement) && !(controlFlow.getElement(endOffset) instanceof PsiContinueStatement)) { endOffset = ((BranchingInstruction)instructions.get(endOffset)).offset; } return endOffset; }