boolean (final PsiClass aClass) { final GlobalSearchScope scope = GlobalSearchScope.allScope(aClass.getProject()); final PsiElementProcessor.CollectElementsWithLimit<PsiClass> processor = new PsiElementProcessor.CollectElementsWithLimit<>(6); final ProgressManager progressManager = ProgressManager.getInstance(); progressManager.runProcess( (Runnable)() -> ClassInheritorsSearch.search(aClass, scope, true).forEach(new PsiElementProcessorAdapter<>(processor)), null); if (processor.isOverflow()) { return false; } final Collection<PsiClass> implementers = processor.getCollection(); for (PsiClass implementer : implementers) { if (!implementer.isInterface() && !implementer.hasModifierProperty(PsiModifier.ABSTRACT) && !ClassUtils.hasOnlyPrivateConstructors(implementer)) { return false; } } return true; }