PsiClass (@NotNull PsiClass clazz, @Nullable PsiElement scope, boolean isInheritorOfClazzAccepted) { PsiElement place = scope; while (place != null && place != clazz && !(place instanceof PsiFile && place.isPhysical())) { if (place instanceof PsiClass) { if (isInheritorOfClazzAccepted) { if (InheritanceUtil.isInheritorOrSelf((PsiClass)place, clazz, true)) return (PsiClass)place; } else { if (clazz.getManager().areElementsEquivalent(place, clazz)) return (PsiClass)place; } } if (place instanceof PsiModifierListOwner && ((PsiModifierListOwner)place).hasModifierProperty(PsiModifier.STATIC)) return null; place = place.getContext(); } if (clazz instanceof GroovyScriptClass && place == clazz.getContainingFile() || place == clazz) { return clazz; } return null; }