List<String> (@NotNull String className, boolean includeSelf, @NotNull Project project) { final List<String> result = new SmartList<>(); // use project and libraries scope, because super class may be outside the scope of the search final GlobalSearchScope projectAndLibraries = ProjectScope.getAllScope(project); final PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(className, projectAndLibraries); if (classes.length == 0) { // to fail fast with "does not match anything in scope" result on unknown class name result.add(className); return result; } for (PsiClass aClass : classes) { if (includeSelf) { final String name = aClass.getName(); if (name != null) result.add(name); } ClassInheritorsSearch.search(aClass, projectAndLibraries, true).forEach(c -> { final String name = c.getName(); if (name != null) result.add(name); return true; }); } return result; }