move fileScope and filesScope back from GlobalSearchScopes to GlobalSearchScope

This commit is contained in:
Dmitry Jemerov
2011-09-23 14:27:02 +02:00
parent caf5a51127
commit c5e9992171
15 changed files with 121 additions and 104 deletions
@@ -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<ImageInfo
}
public static void processValues(VirtualFile virtualFile, FileBasedIndex.ValueProcessor<ImageInfo> 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));
}
@@ -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();
@@ -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) {
@@ -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 <code>file</code> is an ancestor of <code>baseDir</code> and none of the files
* between them are excluded from the project.
@@ -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<VirtualFile> 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<VirtualFile> myFiles;
public FilesScope(final Project project, final Collection<VirtualFile> 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();
}
}
}
@@ -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<VirtualFile> 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<VirtualFile> myFiles;
public FilesScope(final Project project, final Collection<VirtualFile> 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();
}
}
}
@@ -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<VirtualFile> 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";
@@ -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();
@@ -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];
}
}
@@ -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);
}
}
}
@@ -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<SerializedStubTree> datas = FileBasedIndex.getInstance().getValues(StubUpdatingIndex.INDEX_ID, id, GlobalSearchScopes
final List<SerializedStubTree> datas = FileBasedIndex.getInstance().getValues(StubUpdatingIndex.INDEX_ID, id, GlobalSearchScope
.fileScope(project, vFile));
final int size = datas.size();
@@ -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);
}
@@ -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<PsiReference> query =
ReferencesSearch.search(namedElement,
GlobalSearchScopes.fileScope(containingFile));
GlobalSearchScope.fileScope(containingFile));
for (PsiReference reference : query) {
final PsiElement element = reference.getElement();
if (isRequiredObsoleteCollectionElement(element)) {
@@ -351,7 +351,7 @@ public class GroovyConstructorUsagesSearcher extends QueryExecutorBase<PsiRefere
}
});
GlobalSearchScope withTypedAnno = GlobalSearchScopes.filesScope(project, files);
GlobalSearchScope withTypedAnno = GlobalSearchScope.filesScope(project, files);
return withTypedAnno.union(gppExtensions);
}
@@ -39,7 +39,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.search.LowLevelSearchUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScopes;
import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
@@ -153,7 +152,7 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool {
Module module = ModuleUtil.findModuleForPsiElement(file);
if (module == null) return;
final GlobalSearchScope scope = CURRENT_FILE
? GlobalSearchScopes.fileScope(file)
? GlobalSearchScope.fileScope(file)
: MODULE_WITH_DEPENDENCIES
? GlobalSearchScope.moduleWithDependenciesScope(module)
: GlobalSearchScope.projectScope(file.getProject());