mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache all plugin descriptor scope
GitOrigin-RevId: c0fc95e22361de82ae03e11c89958e2bffe44de6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
736053ccc1
commit
e4948159b5
@@ -11,10 +11,14 @@ import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.UseScopeEnlarger;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.DomService;
|
||||
import com.intellij.util.xml.DomTarget;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.devkit.dom.ActionOrGroup;
|
||||
import org.jetbrains.idea.devkit.dom.Extension;
|
||||
import org.jetbrains.idea.devkit.dom.ExtensionPoint;
|
||||
@@ -34,7 +38,7 @@ public class PluginDescriptorUseScopeEnlarger extends UseScopeEnlarger {
|
||||
if (domElement instanceof ExtensionPoint ||
|
||||
domElement instanceof Extension ||
|
||||
domElement instanceof ActionOrGroup) {
|
||||
return createAllPluginDescriptorFilesSearchScope(element);
|
||||
return getAllPluginDescriptorFilesSearchScope(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,16 +47,21 @@ public class PluginDescriptorUseScopeEnlarger extends UseScopeEnlarger {
|
||||
PsiUtil.isIdeaProject(element.getProject()) &&
|
||||
(((PsiClass)element).hasModifierProperty(PsiModifier.PUBLIC) ||
|
||||
((PsiClass)element).hasModifierProperty(PsiModifier.PACKAGE_LOCAL))) {
|
||||
return createAllPluginDescriptorFilesSearchScope(element);
|
||||
return getAllPluginDescriptorFilesSearchScope(element);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static SearchScope createAllPluginDescriptorFilesSearchScope(PsiElement element) {
|
||||
final Project project = element.getProject();
|
||||
final Collection<VirtualFile> pluginXmlFiles =
|
||||
DomService.getInstance().getDomFileCandidates(IdeaPlugin.class,
|
||||
GlobalSearchScope.allScope(project));
|
||||
return GlobalSearchScope.filesScope(project, pluginXmlFiles);
|
||||
@NotNull
|
||||
private static SearchScope getAllPluginDescriptorFilesSearchScope(PsiElement element) {
|
||||
Project project = element.getProject();
|
||||
return CachedValuesManager.getManager(project).getCachedValue(project, () -> {
|
||||
Collection<VirtualFile> pluginXmlFiles =
|
||||
DomService.getInstance().getDomFileCandidates(IdeaPlugin.class,
|
||||
GlobalSearchScope.allScope(project));
|
||||
|
||||
GlobalSearchScope scope = GlobalSearchScope.filesScope(project, pluginXmlFiles);
|
||||
return new CachedValueProvider.Result<>(scope, PsiModificationTracker.MODIFICATION_COUNT);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user