PsiElement (PsiStatement exitStatement) { if (exitStatement instanceof PsiReturnStatement) { return PsiTreeUtil.getParentOfType(exitStatement, PsiMethod.class); } else if (exitStatement instanceof PsiBreakStatement) { return ((PsiBreakStatement)exitStatement).findExitedStatement(); } else if (exitStatement instanceof PsiContinueStatement) { return ((PsiContinueStatement)exitStatement).findContinuedStatement(); } else if (exitStatement instanceof PsiThrowStatement) { final PsiExpression expr = ((PsiThrowStatement)exitStatement).getException(); if (expr == null) return null; final PsiType exceptionType = expr.getType(); if (!(exceptionType instanceof PsiClassType)) return null; PsiElement target = exitStatement; while (!(target instanceof PsiMethod || target == null || target instanceof PsiClass || target instanceof PsiFile)) { if (target instanceof PsiTryStatement tryStatement) { final PsiParameter[] params = tryStatement.getCatchBlockParameters(); for (PsiParameter param : params) { if (param.getType().isAssignableFrom(exceptionType)) { break; } } } target = target.getParent(); } if (target instanceof PsiMethod || target instanceof PsiTryStatement) { return target; } return null; } return null; }