public static boolean runContributors( @NotNull PsiType qualifierType, @NotNull PsiScopeProcessor processor, @NotNull PsiElement place, @NotNull ResolveState state) { MyDelegatingScopeProcessor delegatingProcessor = new MyDelegatingScopeProcessor(processor); ensureInit(); final PsiClass aClass = PsiTypesUtil.getPsiClass(qualifierType); if (aClass != null) { for (String superClassName : TypesUtil.getSuperClassesWithCache(aClass).keySet()) { for (NonCodeMembersContributor enhancer : ourClassSpecifiedContributors.get(superClassName)) { ProgressManager.checkCanceled(); enhancer.processDynamicElements(qualifierType, aClass, delegatingProcessor, place, state); if (!delegatingProcessor.wantMore) { return false; } } } } for (NonCodeMembersContributor contributor : ourAllTypeContributors) { ProgressManager.checkCanceled(); contributor.processDynamicElements(qualifierType, aClass, delegatingProcessor, place, state); if (!delegatingProcessor.wantMore) { return false; } } return GroovyDslFileIndex.processExecutors(qualifierType, place, processor, state); }
private static void ensureInit() { if (ourClassSpecifiedContributors != null) return; MultiMap<String, NonCodeMembersContributor> contributorMap = new MultiMap<String, NonCodeMembersContributor>(); for (final NonCodeMembersContributor contributor : EP_NAME.getExtensions()) { contributorMap.putValue(contributor.getParentClassName(), contributor); } Collection<NonCodeMembersContributor> allTypeContributors = contributorMap.remove(null); ourAllTypeContributors = allTypeContributors.toArray(new NonCodeMembersContributor[allTypeContributors.size()]); ourClassSpecifiedContributors = contributorMap; }