mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't get finders too early, Kotlin compiler registers it's finder a bit later in core initialization.
This commit is contained in:
@@ -50,7 +50,7 @@ import java.util.concurrent.ConcurrentMap;
|
||||
* @author max
|
||||
*/
|
||||
public class JavaPsiFacadeImpl extends JavaPsiFacadeEx {
|
||||
private final PsiElementFinder[] myElementFinders;
|
||||
private ArrayList<PsiElementFinder> myElementFinders;
|
||||
private final PsiNameHelper myNameHelper;
|
||||
private final PsiConstantEvaluationHelper myConstantEvaluationHelper;
|
||||
private final ConcurrentMap<String, PsiPackage> myPackageCache = new ConcurrentHashMap<String, PsiPackage>();
|
||||
@@ -67,11 +67,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx {
|
||||
myNameHelper = new PsiNameHelperImpl(this);
|
||||
myConstantEvaluationHelper = new PsiConstantEvaluationHelperImpl();
|
||||
|
||||
List<PsiElementFinder> elementFinders = new ArrayList<PsiElementFinder>();
|
||||
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<PsiClass> classes = new SmartList<PsiClass>();
|
||||
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<PsiElementFinder> finders() {
|
||||
ArrayList<PsiElementFinder> answer = myElementFinders;
|
||||
if (answer == null) {
|
||||
answer = calcFinders();
|
||||
myElementFinders = answer;
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
|
||||
private ArrayList<PsiElementFinder> calcFinders() {
|
||||
ArrayList<PsiElementFinder> elementFinders = new ArrayList<PsiElementFinder>();
|
||||
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<PsiElementFinder> filteredFinders() {
|
||||
DumbService dumbService = DumbService.getInstance(getProject());
|
||||
List<PsiElementFinder> finders = Arrays.asList(myElementFinders);
|
||||
List<PsiElementFinder> finders = finders();
|
||||
if (dumbService.isDumb()) {
|
||||
finders = dumbService.filterByDumbAwareness(finders);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user