boolean (@NotNull PsiType qualifierType, @NotNull PsiScopeProcessor processor, @NotNull PsiElement place, @NotNull ResolveState state) { ensureInit(); final PsiClass aClass = PsiTypesUtil.getPsiClass(qualifierType); final Iterable<? extends PsiScopeProcessor> unwrappedOriginals = MultiProcessor.allProcessors(processor); for (PsiScopeProcessor each : unwrappedOriginals) { if (!processClassMixins(qualifierType, each, place, state)) { return false; } if (!processCategoriesInScope(qualifierType, each, place, state)) { return false; } if (!processDgmMethods(qualifierType, each, place, state)) { return false; } } final List<MyDelegatingScopeProcessor> wrapped = Collections.singletonList(new MyDelegatingScopeProcessor(processor)); final List<MyDelegatingScopeProcessor> unwrapped = map(MultiProcessor.allProcessors(processor), MyDelegatingScopeProcessor::new); final Iterable<NonCodeMembersContributor> contributors = getApplicableContributors(aClass); for (NonCodeMembersContributor contributor : contributors) { ProgressManager.checkCanceled(); processor.handleEvent(CHANGE_LEVEL, null); final List<MyDelegatingScopeProcessor> delegates = contributor.unwrapMultiprocessor() ? unwrapped : wrapped; for (MyDelegatingScopeProcessor delegatingProcessor : delegates) { ProgressManager.checkCanceled(); contributor.processDynamicElements(qualifierType, aClass, delegatingProcessor, place, state); if (!delegatingProcessor.wantMore) { return false; } } } return true; }