void (Instruction instruction, int offset, int nextOffset) { boolean ret = nextOffset < endOffset && returnCalled[nextOffset]; boolean normal = nextOffset < endOffset && normalCompletion[nextOffset]; final PsiElement element = flow.getElement(offset); boolean goToReturn = instruction instanceof GoToInstruction && ((GoToInstruction)instruction).isReturn; if (goToReturn || isInsideReturnStatement(element)) { ret = true; } else if (instruction instanceof ConditionalThrowToInstruction) { final int throwOffset = ((ConditionalThrowToInstruction)instruction).offset; boolean normalWhenThrow = throwOffset < endOffset && normalCompletion[throwOffset]; boolean normalWhenNotThrow = offset == endOffset - 1 || normalCompletion[offset + 1]; normal = normalWhenThrow || normalWhenNotThrow; } else if (!(instruction instanceof ThrowToInstruction) && nextOffset >= endOffset) { normal = true; } returnCalled[offset] |= ret; normalCompletion[offset] |= normal; }