boolean (@NotNull final AllOverridingMethodsSearch.SearchParameters p, @NotNull final Processor<? super Pair<PsiMethod, PsiMethod>> consumer) { final PsiClass psiClass = p.getPsiClass(); List<PsiMethod> potentials = ReadAction.compute(() -> ContainerUtil.filter(psiClass.getMethods(), PsiUtil::canBeOverridden)); if (potentials.isEmpty()) return true; final SearchScope scope = p.getScope(); JavaPsiFacade psiFacade = ReadAction.compute(()->JavaPsiFacade.getInstance(psiClass.getProject())); Processor<PsiClass> inheritorsProcessor = inheritor -> { for (PsiMethod superMethod : potentials) { ProgressManager.checkCanceled(); if (superMethod.hasModifierProperty(PsiModifier.PACKAGE_LOCAL) && !psiFacade.arePackagesTheSame(psiClass, inheritor)) continue; PsiMethod inInheritor = JavaOverridingMethodsSearcher.findOverridingMethod(inheritor, superMethod, psiClass); if (inInheritor != null && !consumer.process(Pair.create(superMethod, inInheritor))) return false; } return true; }; return ClassInheritorsSearch.search(psiClass, scope, true).allowParallelProcessing().forEach(inheritorsProcessor); }