PsiElement (@Nullable PsiElement place, boolean skipScopingStatements) { PsiElement parent = place; while (true) { if (parent == null) return null; if (parent instanceof PsiStatement) break; if (parent instanceof PsiExpression && parent.getParent() instanceof PsiLambdaExpression) return parent; parent = parent.getParent(); } PsiElement parentStatement = parent; while (parent instanceof PsiStatement && !(parent instanceof PsiSwitchLabeledRuleStatement)) { if (!skipScopingStatements && ((parent instanceof PsiForStatement && parentStatement == ((PsiForStatement)parent).getBody()) || ( parent instanceof PsiForeachStatement && parentStatement == ((PsiForeachStatement)parent).getBody()) || ( parent instanceof PsiWhileStatement && parentStatement == ((PsiWhileStatement)parent).getBody()) || ( parent instanceof PsiIfStatement && (parentStatement == ((PsiIfStatement)parent).getThenBranch() || parentStatement == ((PsiIfStatement)parent).getElseBranch())))) { return parentStatement; } parentStatement = parent; parent = parent.getParent(); } return parentStatement; }