PsiClass[] (PsiClass containingClass, PsiClass psiClass, Set<? super PsiClass> visited) { if (psiClass instanceof PsiTypeParameter) { List<PsiClass> result = new ArrayList<>(); for (PsiClassType classType : psiClass.getExtendsListTypes()) { PsiClass aClass = classType.resolve(); if (aClass != null && visited.add(aClass)) { ContainerUtil.addAll(result, getInheritors(containingClass, aClass, visited)); } } return result.toArray(PsiClass.EMPTY_ARRAY); } PsiElementFindProcessor<PsiClass> processor1 = new PsiElementFindProcessor<>(containingClass); while (psiClass != null) { if (!processor1.process(psiClass) || !ClassInheritorsSearch.search(containingClass).forEach(new PsiElementFindProcessor<>(psiClass)) || !ClassInheritorsSearch.search(psiClass).forEach(processor1)) { return new PsiClass[]{psiClass}; } psiClass = psiClass.getContainingClass(); } return PsiClass.EMPTY_ARRAY; }