diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index 9684f1d81dd7..e4986cc7469a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -50,7 +50,7 @@ import java.util.concurrent.ConcurrentMap; * @author max */ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { - private final PsiElementFinder[] myElementFinders; + private ArrayList myElementFinders; private final PsiNameHelper myNameHelper; private final PsiConstantEvaluationHelper myConstantEvaluationHelper; private final ConcurrentMap myPackageCache = new ConcurrentHashMap(); @@ -67,11 +67,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { myNameHelper = new PsiNameHelperImpl(this); myConstantEvaluationHelper = new PsiConstantEvaluationHelperImpl(); - List elementFinders = new ArrayList(); - elementFinders.add(new PsiElementFinderImpl()); - ContainerUtil.addAll(elementFinders, myProject.getExtensions(PsiElementFinder.EP_NAME)); - myElementFinders = elementFinders.toArray(new PsiElementFinder[elementFinders.size()]); - final PsiModificationTracker modificationTracker = psiManager.getModificationTracker(); if (bus != null) { @@ -113,7 +108,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { return null; } - for (PsiElementFinder finder : myElementFinders) { + for (PsiElementFinder finder : finders()) { PsiClass aClass = finder.findClass(qualifiedName, scope); if (aClass != null) return aClass; } @@ -161,7 +156,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { } List classes = new SmartList(); - for (PsiElementFinder finder : myElementFinders) { + for (PsiElementFinder finder : finders()) { PsiClass[] finderClasses = finder.findClasses(qualifiedName, scope); ContainerUtil.addAll(classes, finderClasses); } @@ -169,6 +164,23 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { return classes.toArray(new PsiClass[classes.size()]); } + private ArrayList finders() { + ArrayList answer = myElementFinders; + if (answer == null) { + answer = calcFinders(); + myElementFinders = answer; + } + + return answer; + } + + private ArrayList calcFinders() { + ArrayList elementFinders = new ArrayList(); + elementFinders.add(new PsiElementFinderImpl()); + ContainerUtil.addAll(elementFinders, myProject.getExtensions(PsiElementFinder.EP_NAME)); + return elementFinders; + } + @Override @NotNull public PsiConstantEvaluationHelper getConstantEvaluationHelper() { @@ -194,7 +206,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { private List filteredFinders() { DumbService dumbService = DumbService.getInstance(getProject()); - List finders = Arrays.asList(myElementFinders); + List finders = finders(); if (dumbService.isDumb()) { finders = dumbService.filterByDumbAwareness(finders); }