From 1b233b361be345831c1fd3c6991be76b31fd1c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 22 Oct 2014 21:48:47 +0200 Subject: [PATCH] DomService: getDomFileCandidates() cleanup/performance, deprecation --- .../src/util/ExtensionPointLocator.java | 2 +- .../util/xml/impl/DomServiceImpl.java | 12 ++++++-- .../intellij/util/xml/DomFileDescription.java | 3 +- .../src/com/intellij/util/xml/DomService.java | 29 +++++++++---------- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/plugins/devkit/src/util/ExtensionPointLocator.java b/plugins/devkit/src/util/ExtensionPointLocator.java index c4a5b19c156a..e8d895a1e7dc 100644 --- a/plugins/devkit/src/util/ExtensionPointLocator.java +++ b/plugins/devkit/src/util/ExtensionPointLocator.java @@ -75,7 +75,7 @@ public class ExtensionPointLocator { } final Project project = psiClass.getProject(); - final Collection candidates = DomService.getInstance().getDomFileCandidates(IdeaPlugin.class, project); + final Collection candidates = DomService.getInstance().getDomFileCandidates(IdeaPlugin.class, project, GlobalSearchScope.allScope(project)); GlobalSearchScope scope = GlobalSearchScope.filesScope(project, candidates); PsiSearchHelper.SERVICE.getInstance(project).processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() { @Override diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java index 94987bc604a9..eb8c57a9c281 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java @@ -164,12 +164,19 @@ public class DomServiceImpl extends DomService { @Override public Collection getDomFileCandidates(Class description, Project project) { - return FileBasedIndex.getInstance().getContainingFiles(DomFileIndex.NAME, description.getName(), GlobalSearchScope.allScope(project)); + return getDomFileCandidates(description, project, GlobalSearchScope.allScope(project)); + } + + @Override + public Collection getDomFileCandidates(Class rootElementClass, + Project project, + final GlobalSearchScope scope) { + return FileBasedIndex.getInstance().getContainingFiles(DomFileIndex.NAME, rootElementClass.getName(), scope); } @Override public List> getFileElements(final Class clazz, final Project project, @Nullable final GlobalSearchScope scope) { - final Collection list = scope == null ? getDomFileCandidates(clazz, project) : getDomFileCandidates(clazz, project, scope); + final Collection list = getDomFileCandidates(clazz, project, scope != null ? scope : GlobalSearchScope.allScope(project)); final ArrayList> result = new ArrayList>(list.size()); for (VirtualFile file : list) { final PsiFile psiFile = PsiManager.getInstance(project).findFile(file); @@ -189,5 +196,4 @@ public class DomServiceImpl extends DomService { public StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, final Function modeProvider) { return new DomStructureViewBuilder(file, modeProvider); } - } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java b/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java index eb5de3eebf43..97950b30037e 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java @@ -126,7 +126,8 @@ public class DomFileDescription { /** * @return some version. Override and change (e.g. super.getVersion()+1) when after some changes some files stopped being * described by this description or vice versa, so that the - * {@link com.intellij.util.xml.DomService#getDomFileCandidates(Class, com.intellij.openapi.project.Project)} index is rebuilt correctly. + * {@link com.intellij.util.xml.DomService#getDomFileCandidates(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope)} + * index is rebuilt correctly. */ public int getVersion() { return myRootTagName.hashCode(); diff --git a/xml/dom-openapi/src/com/intellij/util/xml/DomService.java b/xml/dom-openapi/src/com/intellij/util/xml/DomService.java index dced490f43d5..a2d567e9c87a 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/DomService.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/DomService.java @@ -19,12 +19,10 @@ package com.intellij.util.xml; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.XmlFile; import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,24 +42,21 @@ public abstract class DomService { return ourCachedInstance; } + /** + * @deprecated use {@link #getDomFileCandidates(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope)} (to remove in IDEA 15) + */ + public abstract Collection getDomFileCandidates(Class description, Project project); + /** * @param rootElementClass class of root (file-level) element in DOM model - * @param project current project - * @param scope search scope + * @param project current project + * @param scope search scope * @return files containing given root element - * * @see #getFileElements(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope) */ - public Collection getDomFileCandidates(Class rootElementClass, Project project, final GlobalSearchScope scope) { - return ContainerUtil.findAll(getDomFileCandidates(rootElementClass, project), new Condition() { - @Override - public boolean value(final VirtualFile file) { - return scope.contains(file); - } - }); - } - - public abstract Collection getDomFileCandidates(Class description, Project project); + public abstract Collection getDomFileCandidates(Class rootElementClass, + Project project, + GlobalSearchScope scope); /** * @param rootElementClass class of root (file-level) element in DOM model @@ -89,5 +84,7 @@ public abstract class DomService { public enum StructureViewMode { SHOW, SHOW_CHILDREN, SKIP } - public abstract StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, final Function modeProvider); + + public abstract StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, + final Function modeProvider); }