From c5e99921710db4a241826b57abb5fbdaa9b7d3e3 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 23 Sep 2011 13:08:04 +0200 Subject: [PATCH] move fileScope and filesScope back from GlobalSearchScopes to GlobalSearchScope --- .../intellij/images/index/ImageInfoIndex.java | 4 +- .../psi/impl/source/PsiJavaFileImpl.java | 3 +- .../typeMigration/ui/TypeMigrationDialog.java | 4 +- .../openapi/roots/FileIndexFacade.java | 5 ++ .../psi/search/GlobalSearchScope.java | 88 +++++++++++++++++++ .../psi/search/GlobalSearchScopes.java | 86 ------------------ .../util/scopeChooser/ScopeChooserCombo.java | 2 +- .../vcs/impl/ProjectFileIndexFacade.java | 8 ++ .../cache/impl/IndexCacheManagerImpl.java | 3 +- .../file/impl/ResolveScopeManagerImpl.java | 3 +- .../psi/stubs/StubTreeLoaderImpl.java | 4 +- .../vcs/impl/DefaultFileIndexFacade.java | 6 ++ .../ObsoleteCollectionInspection.java | 4 +- .../GroovyConstructorUsagesSearcher.java | 2 +- .../DuplicatePropertyInspection.java | 3 +- 15 files changed, 121 insertions(+), 104 deletions(-) diff --git a/images/src/org/intellij/images/index/ImageInfoIndex.java b/images/src/org/intellij/images/index/ImageInfoIndex.java index 94026bc8de64..05aaae2b4789 100644 --- a/images/src/org/intellij/images/index/ImageInfoIndex.java +++ b/images/src/org/intellij/images/index/ImageInfoIndex.java @@ -19,7 +19,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.ex.temp.TempFileSystem; -import com.intellij.psi.search.GlobalSearchScopes; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.indexing.*; import com.intellij.util.io.DataExternalizer; import org.intellij.images.fileTypes.ImageFileTypeManager; @@ -71,7 +71,7 @@ public class ImageInfoIndex extends SingleEntryFileBasedIndexExtension processor, Project project) { - FileBasedIndex.getInstance().processValues(INDEX_ID, Math.abs(FileBasedIndex.getFileId(virtualFile)), virtualFile, processor, GlobalSearchScopes + FileBasedIndex.getInstance().processValues(INDEX_ID, Math.abs(FileBasedIndex.getFileId(virtualFile)), virtualFile, processor, GlobalSearchScope .fileScope(project, virtualFile)); } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java index 11bd56a8f739..c302e2d45b70 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/PsiJavaFileImpl.java @@ -25,7 +25,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.FileViewProvider; import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.GlobalSearchScopes; import com.intellij.testFramework.LightVirtualFile; import org.jetbrains.annotations.NotNull; @@ -49,7 +48,7 @@ public class PsiJavaFileImpl extends PsiJavaFileBaseImpl { if (file != null && !(file instanceof LightVirtualFile)) { final FileIndexFacade index = ServiceManager.getService(getProject(), FileIndexFacade.class); if (!index.isInSource(file) && !index.isInLibraryClasses(file)) { - return GlobalSearchScopes.fileScope(this); + return GlobalSearchScope.fileScope(this); } } return super.getResolveScope(); diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/ui/TypeMigrationDialog.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/ui/TypeMigrationDialog.java index edbb70b0756c..8ffdffd2c6a8 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/ui/TypeMigrationDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/ui/TypeMigrationDialog.java @@ -31,7 +31,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; -import com.intellij.psi.search.GlobalSearchScopes; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; @@ -145,7 +145,7 @@ public class TypeMigrationDialog extends RefactoringDialog { if (VisibilityUtil.compare(VisibilityUtil.getVisibilityModifier(modifierList), PsiModifier.PRIVATE) < 0) return null; } - for (PsiReference reference : ReferencesSearch.search(root, GlobalSearchScopes.fileScope(root.getContainingFile()))) { + for (PsiReference reference : ReferencesSearch.search(root, GlobalSearchScope.fileScope(root.getContainingFile()))) { final PsiElement element = reference.getElement(); final PsiExpression expr = PsiTreeUtil.getParentOfType(element, PsiExpression.class, false); if (expr != null) { diff --git a/platform/core-api/src/com/intellij/openapi/roots/FileIndexFacade.java b/platform/core-api/src/com/intellij/openapi/roots/FileIndexFacade.java index 9dd197d64789..e4250e898e4b 100644 --- a/platform/core-api/src/com/intellij/openapi/roots/FileIndexFacade.java +++ b/platform/core-api/src/com/intellij/openapi/roots/FileIndexFacade.java @@ -15,8 +15,10 @@ */ package com.intellij.openapi.roots; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.Nullable; /** * @author yole @@ -33,6 +35,9 @@ public abstract class FileIndexFacade { public abstract boolean isInLibraryClasses(VirtualFile file); public abstract boolean isExcludedFile(VirtualFile file); + @Nullable + public abstract Module getModuleForFile(VirtualFile file); + /** * Checks if file is an ancestor of baseDir and none of the files * between them are excluded from the project. diff --git a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java index 02b56b91e8a0..51670e4368cc 100644 --- a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java +++ b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java @@ -15,20 +15,25 @@ */ package com.intellij.psi.search; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeRegistry; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.FileIndexFacade; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiBundle; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; public abstract class GlobalSearchScope extends SearchScope implements ProjectAwareFileFilter { @@ -218,6 +223,19 @@ public abstract class GlobalSearchScope extends SearchScope implements ProjectAw return module.getModuleWithDependentsScope(); } + public static GlobalSearchScope fileScope(@NotNull PsiFile psiFile) { + return new FileScope(psiFile.getProject(), psiFile.getVirtualFile()); + } + + public static GlobalSearchScope fileScope(final Project project, final VirtualFile virtualFile) { + return new FileScope(project, virtualFile); + } + + public static GlobalSearchScope filesScope(final Project project, final Collection files) { + if (files.isEmpty()) return EMPTY_SCOPE; + return files.size() == 1? fileScope(project, files.iterator().next()) : new FilesScope(project, files); + } + static class IntersectionScope extends GlobalSearchScope { private final GlobalSearchScope myScope1; private final GlobalSearchScope myScope2; @@ -469,4 +487,74 @@ public abstract class GlobalSearchScope extends SearchScope implements ProjectAw } public static final GlobalSearchScope EMPTY_SCOPE = new EmptyScope(); + + private static class FileScope extends GlobalSearchScope { + private final VirtualFile myVirtualFile; + private final Module myModule; + + private FileScope(final Project project, final VirtualFile virtualFile) { + super(project); + myVirtualFile = virtualFile; + FileIndexFacade fileIndex = ServiceManager.getService(project, FileIndexFacade.class); + myModule = myVirtualFile != null ? fileIndex.getModuleForFile(myVirtualFile) : null; + } + + public boolean contains(VirtualFile file) { + return Comparing.equal(myVirtualFile, file); + } + + public int compare(VirtualFile file1, VirtualFile file2) { + return 0; + } + + public boolean isSearchInModuleContent(@NotNull Module aModule) { + return aModule == myModule; + } + + public boolean isSearchInLibraries() { + return myModule == null; + } + } + + private static class FilesScope extends GlobalSearchScope { + private final Collection myFiles; + + public FilesScope(final Project project, final Collection files) { + super(project); + myFiles = files; + } + + @Override + public boolean contains(final VirtualFile file) { + return myFiles.contains(file); + } + + @Override + public int compare(final VirtualFile file1, final VirtualFile file2) { + return 0; + } + + @Override + public boolean isSearchInModuleContent(@NotNull Module aModule) { + return true; + } + + @Override + public boolean isSearchInLibraries() { + return false; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof FilesScope)) return false; + + return myFiles.equals(((FilesScope)o).myFiles); + } + + @Override + public int hashCode() { + return myFiles.hashCode(); + } + } } diff --git a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java index 5fa0879e18e8..a66b446ae986 100644 --- a/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java +++ b/platform/lang-api/src/com/intellij/psi/search/GlobalSearchScopes.java @@ -19,7 +19,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiBundle; @@ -29,8 +28,6 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.search.scope.packageSet.*; import org.jetbrains.annotations.NotNull; -import java.util.Collection; - /** * @author yole */ @@ -58,19 +55,6 @@ public class GlobalSearchScopes { return new DirectoryScope(project, directory, withSubdirectories); } - public static GlobalSearchScope fileScope(@NotNull PsiFile psiFile) { - return new FileScope(psiFile.getProject(), psiFile.getVirtualFile()); - } - - public static GlobalSearchScope fileScope(final Project project, final VirtualFile virtualFile) { - return new FileScope(project, virtualFile); - } - - public static GlobalSearchScope filesScope(final Project project, final Collection files) { - if (files.isEmpty()) return GlobalSearchScope.EMPTY_SCOPE; - return files.size() == 1? fileScope(project, files.iterator().next()) : new FilesScope(project, files); - } - private static class FilterScopeAdapter extends GlobalSearchScope { private final NamedScope mySet; private final PsiManager myManager; @@ -215,74 +199,4 @@ public class GlobalSearchScopes { return "directory scope: " + myDirectory + "; withSubdirs:"+myWithSubdirectories; } } - - private static class FileScope extends GlobalSearchScope { - private final VirtualFile myVirtualFile; - private final Module myModule; - - private FileScope(final Project project, final VirtualFile virtualFile) { - super(project); - myVirtualFile = virtualFile; - ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); - myModule = myVirtualFile != null ? fileIndex.getModuleForFile(myVirtualFile) : null; - } - - public boolean contains(VirtualFile file) { - return Comparing.equal(myVirtualFile, file); - } - - public int compare(VirtualFile file1, VirtualFile file2) { - return 0; - } - - public boolean isSearchInModuleContent(@NotNull Module aModule) { - return aModule == myModule; - } - - public boolean isSearchInLibraries() { - return myModule == null; - } - } - - private static class FilesScope extends GlobalSearchScope { - private final Collection myFiles; - - public FilesScope(final Project project, final Collection files) { - super(project); - myFiles = files; - } - - @Override - public boolean contains(final VirtualFile file) { - return myFiles.contains(file); - } - - @Override - public int compare(final VirtualFile file1, final VirtualFile file2) { - return 0; - } - - @Override - public boolean isSearchInModuleContent(@NotNull Module aModule) { - return true; - } - - @Override - public boolean isSearchInLibraries() { - return false; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof FilesScope)) return false; - - return myFiles.equals(((FilesScope)o).myFiles); - } - - @Override - public int hashCode() { - return myFiles.hashCode(); - } - } } diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java index de1fa0f00566..25537711dabe 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java @@ -347,7 +347,7 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton implements Dispo final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (files != null) { final List openFiles = Arrays.asList(files); - result.add(new DelegatingGlobalSearchScope(GlobalSearchScopes.filesScope(project, openFiles)){ + result.add(new DelegatingGlobalSearchScope(GlobalSearchScope.filesScope(project, openFiles)){ @Override public String getDisplayName() { return "Selected files"; diff --git a/platform/lang-impl/src/com/intellij/openapi/vcs/impl/ProjectFileIndexFacade.java b/platform/lang-impl/src/com/intellij/openapi/vcs/impl/ProjectFileIndexFacade.java index 74ffe9893795..9928dc2a960a 100644 --- a/platform/lang-impl/src/com/intellij/openapi/vcs/impl/ProjectFileIndexFacade.java +++ b/platform/lang-impl/src/com/intellij/openapi/vcs/impl/ProjectFileIndexFacade.java @@ -16,11 +16,13 @@ package com.intellij.openapi.vcs.impl; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.impl.DirectoryIndex; import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.Nullable; /** * @author yole @@ -53,6 +55,12 @@ public class ProjectFileIndexFacade extends FileIndexFacade { return myRootManager.getFileIndex().isIgnored(file); } + @Nullable + @Override + public Module getModuleForFile(VirtualFile file) { + return myRootManager.getFileIndex().getModuleForFile(file); + } + public boolean isValidAncestor(final VirtualFile baseDir, VirtualFile childDir) { if (!childDir.isDirectory()) { childDir = childDir.getParent(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java index 7157979ce422..ced908fd080c 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java @@ -35,7 +35,6 @@ import com.intellij.psi.impl.cache.impl.id.IdIndexEntry; import com.intellij.psi.impl.cache.impl.todo.TodoIndex; import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.GlobalSearchScopes; import com.intellij.psi.search.IndexPattern; import com.intellij.psi.search.IndexPatternProvider; import com.intellij.psi.util.PsiUtilCore; @@ -192,7 +191,7 @@ public class IndexCacheManagerImpl implements CacheManager{ count[0] += value.intValue(); return true; } - }, GlobalSearchScopes.fileScope(myProject, file)); + }, GlobalSearchScope.fileScope(myProject, file)); return count[0]; } } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java index 884307c14b93..d00bba8e12d7 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java @@ -26,7 +26,6 @@ import com.intellij.psi.impl.PsiManagerImpl; import com.intellij.psi.impl.ResolveScopeManager; import com.intellij.psi.impl.source.resolve.FileContextUtil; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.GlobalSearchScopes; import com.intellij.psi.search.SearchScope; import com.intellij.util.containers.ConcurrentFactoryMap; import org.jetbrains.annotations.NotNull; @@ -188,7 +187,7 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager { final VirtualFile vf = f == null ? null : f.getVirtualFile(); return f == null || vf == null || vf.isDirectory() || allScope.contains(vf) - ? allScope : GlobalSearchScopes.fileScope(f).uniteWith(allScope); + ? allScope : GlobalSearchScope.fileScope(f).uniteWith(allScope); } } } diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java index 5491db0d3724..f68557a0a9b6 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java @@ -23,7 +23,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.search.GlobalSearchScopes; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.indexing.FileContent; import com.intellij.util.indexing.FileContentImpl; @@ -73,7 +73,7 @@ public class StubTreeLoaderImpl extends StubTreeLoader { final int id = Math.abs(FileBasedIndex.getFileId(vFile)); if (id > 0) { - final List datas = FileBasedIndex.getInstance().getValues(StubUpdatingIndex.INDEX_ID, id, GlobalSearchScopes + final List datas = FileBasedIndex.getInstance().getValues(StubUpdatingIndex.INDEX_ID, id, GlobalSearchScope .fileScope(project, vFile)); final int size = datas.size(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/DefaultFileIndexFacade.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/DefaultFileIndexFacade.java index cc12cb416bbe..97c05132e651 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/DefaultFileIndexFacade.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/DefaultFileIndexFacade.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vcs.impl; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.vfs.VfsUtil; @@ -52,6 +53,11 @@ public class DefaultFileIndexFacade extends FileIndexFacade { return false; } + @Override + public Module getModuleForFile(VirtualFile file) { + return null; + } + public boolean isValidAncestor(final VirtualFile baseDir, final VirtualFile childDir) { return VfsUtil.isAncestor(baseDir, childDir, false); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java index 4d6de46f0887..c99600adb7d4 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java @@ -16,7 +16,7 @@ package com.siyeh.ig.maturity; import com.intellij.psi.*; -import com.intellij.psi.search.GlobalSearchScopes; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Query; @@ -150,7 +150,7 @@ public class ObsoleteCollectionInspection extends BaseInspection { final PsiFile containingFile = namedElement.getContainingFile(); final Query query = ReferencesSearch.search(namedElement, - GlobalSearchScopes.fileScope(containingFile)); + GlobalSearchScope.fileScope(containingFile)); for (PsiReference reference : query) { final PsiElement element = reference.getElement(); if (isRequiredObsoleteCollectionElement(element)) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GroovyConstructorUsagesSearcher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GroovyConstructorUsagesSearcher.java index 425261b0e149..092a0179445c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GroovyConstructorUsagesSearcher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/GroovyConstructorUsagesSearcher.java @@ -351,7 +351,7 @@ public class GroovyConstructorUsagesSearcher extends QueryExecutorBase