From 7fcc048781a4e71a78598b367aa5af9cb46ee88b Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 14 Nov 2018 20:40:46 +0100 Subject: [PATCH] first goto symbol speedup allow inheritors of GoToSymbolProvider to quickly filter out inapplicable modules instead of trying to find symbols for every single module, which can involve expensive module service creation and whole-project order entry enumeration --- .../model/gotosymbol/GoToSymbolProvider.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/xml/dom-impl/src/com/intellij/util/xml/model/gotosymbol/GoToSymbolProvider.java b/xml/dom-impl/src/com/intellij/util/xml/model/gotosymbol/GoToSymbolProvider.java index e725033a36e9..379d6deff3af 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/model/gotosymbol/GoToSymbolProvider.java +++ b/xml/dom-impl/src/com/intellij/util/xml/model/gotosymbol/GoToSymbolProvider.java @@ -41,6 +41,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -49,7 +50,7 @@ import java.util.Set; */ public abstract class GoToSymbolProvider implements ChooseByNameContributor { // non-static to store modules accepted by different providers separately - private final Key>> ACCEPTABLE_MODULES = Key.create("ACCEPTABLE_MODULES_" + toString()); + private final Key>> ACCEPTABLE_MODULES = Key.create("ACCEPTABLE_MODULES_" + toString()); protected abstract void addNames(@NotNull Module module, Set result); @@ -63,11 +64,14 @@ public abstract class GoToSymbolProvider implements ChooseByNameContributor { } } - private List getAcceptableModules(final Project project) { - return CachedValuesManager.getManager(project).getCachedValue(project, ACCEPTABLE_MODULES, () -> { - List result = ContainerUtil.findAll(ModuleManager.getInstance(project).getModules(), module -> acceptModule(module)); - return CachedValueProvider.Result.create(result, PsiModificationTracker.MODIFICATION_COUNT); - }, false); + private Collection getAcceptableModules(final Project project) { + return CachedValuesManager.getManager(project).getCachedValue(project, ACCEPTABLE_MODULES, () -> + CachedValueProvider.Result.create(calcAcceptableModules(project), PsiModificationTracker.MODIFICATION_COUNT), false); + } + + @NotNull + protected Collection calcAcceptableModules(@NotNull Project project) { + return ContainerUtil.findAll(ModuleManager.getInstance(project).getModules(), module -> acceptModule(module)); } @Override @@ -159,7 +163,6 @@ public abstract class GoToSymbolProvider implements ChooseByNameContributor { } @Override - @Nullable public String getLocationString() { return '(' + myPsiElement.getContainingFile().getName() + ')'; }