PsiElement (PsiElement @NotNull [] occurrences, @NotNull PsiElement container) { if (occurrences.length == 0) return null; PsiElement candidate; if (occurrences.length == 1) { candidate = findContainingStatement(occurrences[0]); } else { candidate = occurrences[0]; while (candidate != null && candidate.getParent() != container) { candidate = candidate.getParent(); } } final GrStringInjection injection = PsiTreeUtil.getParentOfType(candidate, GrStringInjection.class); if (injection != null && !injection.getText().contains("\n")) { candidate = findContainingStatement(injection); } if (candidate == null) return null; if ((container instanceof GrWhileStatement) && candidate.equals(((GrWhileStatement)container).getCondition())) { return container; } if ((container instanceof GrIfStatement) && candidate.equals(((GrIfStatement)container).getCondition())) { return container; } if ((container instanceof GrForStatement) && candidate.equals(((GrForStatement)container).getClause())) { return container; } while (candidate instanceof GrIfStatement && candidate.getParent() instanceof GrIfStatement && ((GrIfStatement)candidate.getParent()).getElseBranch() == candidate) { candidate = candidate.getParent(); } return candidate; }