mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
extract ResolveScopeManager out of FileManagerImpl
This commit is contained in:
@@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.OrFilter;
|
||||
import com.intellij.psi.impl.compiled.ClsElementImpl;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.scope.ElementClassFilter;
|
||||
@@ -307,7 +308,7 @@ public class PsiClassImplUtil {
|
||||
}
|
||||
|
||||
public static SearchScope getClassUseScope(final PsiClass aClass) {
|
||||
final GlobalSearchScope maximalUseScope = ((PsiManagerEx) aClass.getManager()).getFileManager().getUseScope(aClass);
|
||||
final GlobalSearchScope maximalUseScope = ResolveScopeManager.getElementUseScope(aClass);
|
||||
if (aClass instanceof PsiAnonymousClass) {
|
||||
return new LocalSearchScope(aClass);
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.light.LightClassReference;
|
||||
import com.intellij.psi.impl.source.PsiClassReferenceType;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
@@ -348,8 +349,7 @@ public class PsiImplUtil {
|
||||
|
||||
@NotNull
|
||||
public static SearchScope getMemberUseScope(@NotNull PsiMember member) {
|
||||
final PsiManagerEx psiManager = (PsiManagerEx)member.getManager();
|
||||
final GlobalSearchScope maximalUseScope = psiManager.getFileManager().getUseScope(member);
|
||||
final GlobalSearchScope maximalUseScope = ResolveScopeManager.getElementUseScope(member);
|
||||
PsiFile file = member.getContainingFile();
|
||||
if (JspPsiUtil.isInJspFile(file)) return maximalUseScope;
|
||||
|
||||
@@ -372,7 +372,7 @@ public class PsiImplUtil {
|
||||
}
|
||||
else {
|
||||
if (file instanceof PsiJavaFile) {
|
||||
PsiPackage aPackage = JavaPsiFacade.getInstance(psiManager.getProject()).findPackage(((PsiJavaFile)file).getPackageName());
|
||||
PsiPackage aPackage = JavaPsiFacade.getInstance(member.getProject()).findPackage(((PsiJavaFile)file).getPackageName());
|
||||
if (aPackage != null) {
|
||||
SearchScope scope = PackageScope.packageScope(aPackage, false);
|
||||
scope = scope.intersectWith(maximalUseScope);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.tree.JavaElementType;
|
||||
import com.intellij.psi.impl.source.tree.LeafElement;
|
||||
import com.intellij.psi.impl.source.tree.TreeElement;
|
||||
@@ -83,7 +84,7 @@ public class PsiLiteralExpressionImpl
|
||||
}
|
||||
if (type == JavaTokenType.STRING_LITERAL) {
|
||||
PsiManagerEx manager = getManager();
|
||||
GlobalSearchScope resolveScope = manager.getFileManager().getResolveScope(this);
|
||||
GlobalSearchScope resolveScope = ResolveScopeManager.getElementResolveScope(this);
|
||||
return PsiType.getJavaLangString(manager, resolveScope);
|
||||
}
|
||||
if (type == JavaTokenType.TRUE_KEYWORD || type == JavaTokenType.FALSE_KEYWORD) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.*;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.impl.source.JavaDummyHolder;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
@@ -321,7 +322,7 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
|
||||
return new LocalSearchScope(parentElement.getParent());
|
||||
}
|
||||
else {
|
||||
return getManager().getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.ElementBase;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.tree.SharedImplUtil;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -180,12 +181,12 @@ public abstract class PsiElementBase extends ElementBase implements NavigatableP
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
return ((PsiManagerEx)getManager()).getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return ((PsiManagerEx) getManager()).getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,8 +20,8 @@ package com.intellij.psi.impl;
|
||||
import com.intellij.ide.util.EditSourceUtil;
|
||||
import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
@@ -113,12 +113,12 @@ public abstract class PsiElementBase extends ElementBase implements PsiElement {
|
||||
|
||||
@NotNull
|
||||
public final GlobalSearchScope getResolveScope() {
|
||||
return ((PsiManagerEx)getManager()).getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return ((PsiManagerEx) getManager()).getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
public void navigate(boolean requestFocus) {
|
||||
|
||||
@@ -19,9 +19,7 @@ package com.intellij.psi.impl.file.impl;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.FileViewProvider;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
@@ -44,9 +42,6 @@ public interface FileManager {
|
||||
@Nullable
|
||||
PsiFile getCachedPsiFile(@NotNull VirtualFile vFile);
|
||||
|
||||
@NotNull GlobalSearchScope getResolveScope(@NotNull PsiElement element);
|
||||
@NotNull GlobalSearchScope getUseScope(@NotNull PsiElement element);
|
||||
|
||||
@TestOnly
|
||||
void cleanupForNextTest();
|
||||
|
||||
|
||||
@@ -28,13 +28,12 @@ import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManagerAdapter;
|
||||
import com.intellij.openapi.fileTypes.*;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ex.ProjectEx;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.ex.ProjectRootManagerEx;
|
||||
import com.intellij.openapi.roots.ModuleRootEvent;
|
||||
import com.intellij.openapi.roots.ModuleRootListener;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiFileEx;
|
||||
@@ -42,12 +41,7 @@ import com.intellij.psi.impl.PsiManagerImpl;
|
||||
import com.intellij.psi.impl.PsiTreeChangeEventImpl;
|
||||
import com.intellij.psi.impl.file.PsiDirectoryFactory;
|
||||
import com.intellij.psi.impl.source.PsiFileImpl;
|
||||
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.ConcurrencyUtil;
|
||||
import com.intellij.util.containers.ConcurrentFactoryMap;
|
||||
import com.intellij.util.containers.ConcurrentSoftValueHashMap;
|
||||
import com.intellij.util.containers.ConcurrentWeakValueHashMap;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
@@ -71,27 +65,6 @@ public class FileManagerImpl implements FileManager {
|
||||
private final ConcurrentMap<VirtualFile, PsiDirectory> myVFileToPsiDirMap = new ConcurrentSoftValueHashMap<VirtualFile, PsiDirectory>();
|
||||
private final ConcurrentWeakValueHashMap<VirtualFile, FileViewProvider> myVFileToViewProviderMap = new ConcurrentWeakValueHashMap<VirtualFile, FileViewProvider>();
|
||||
|
||||
private final Map<VirtualFile, GlobalSearchScope> myDefaultResolveScopesCache = new ConcurrentFactoryMap<VirtualFile, GlobalSearchScope>() {
|
||||
@Override
|
||||
protected GlobalSearchScope create(VirtualFile key) {
|
||||
final Project project = myManager.getProject();
|
||||
GlobalSearchScope scope = null;
|
||||
for(ResolveScopeProvider resolveScopeProvider:ResolveScopeProvider.EP_NAME.getExtensions()) {
|
||||
scope = resolveScopeProvider.getResolveScope(key, project);
|
||||
if (scope != null) break;
|
||||
}
|
||||
if (scope == null) scope = getInherentResolveScope(key);
|
||||
for (ResolveScopeEnlarger enlarger : ResolveScopeEnlarger.EP_NAME.getExtensions()) {
|
||||
final SearchScope extra = enlarger.getAdditionalResolveScope(key, project);
|
||||
if (extra != null) {
|
||||
scope = scope.union(extra);
|
||||
}
|
||||
}
|
||||
|
||||
return scope;
|
||||
}
|
||||
};
|
||||
|
||||
private boolean myInitialized = false;
|
||||
private boolean myDisposed = false;
|
||||
|
||||
@@ -117,13 +90,6 @@ public class FileManagerImpl implements FileManager {
|
||||
recalcAllViewProviders();
|
||||
}
|
||||
});
|
||||
|
||||
manager.registerRunnableToRunOnChange(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myDefaultResolveScopesCache.clear();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void processQueue() {
|
||||
@@ -357,122 +323,6 @@ public class FileManagerImpl implements FileManager {
|
||||
return getCachedPsiFileInner(vFile);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope(@NotNull PsiElement element) {
|
||||
ProgressManager.checkCanceled();
|
||||
|
||||
VirtualFile vFile;
|
||||
final Project project = myManager.getProject();
|
||||
final PsiFile contextFile;
|
||||
if (element instanceof PsiDirectory) {
|
||||
vFile = ((PsiDirectory)element).getVirtualFile();
|
||||
contextFile = null;
|
||||
}
|
||||
else {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile instanceof PsiCodeFragment) {
|
||||
final GlobalSearchScope forcedScope = ((PsiCodeFragment)containingFile).getForcedResolveScope();
|
||||
if (forcedScope != null) {
|
||||
return forcedScope;
|
||||
}
|
||||
final PsiElement context = containingFile.getContext();
|
||||
if (context == null) {
|
||||
return GlobalSearchScope.allScope(project);
|
||||
}
|
||||
return getResolveScope(context);
|
||||
}
|
||||
|
||||
contextFile = containingFile != null ? FileContextUtil.getContextFile(containingFile) : null;
|
||||
if (contextFile == null) {
|
||||
return GlobalSearchScope.allScope(project);
|
||||
}
|
||||
else if (contextFile instanceof FileResolveScopeProvider) {
|
||||
return ((FileResolveScopeProvider) contextFile).getFileResolveScope();
|
||||
}
|
||||
vFile = contextFile.getOriginalFile().getVirtualFile();
|
||||
}
|
||||
if (vFile == null || contextFile == null) {
|
||||
return GlobalSearchScope.allScope(project);
|
||||
}
|
||||
|
||||
return getDefaultResolveScope(project, contextFile, vFile);
|
||||
}
|
||||
|
||||
|
||||
public GlobalSearchScope getDefaultResolveScope(final VirtualFile vFile) {
|
||||
final Project project = myManager.getProject();
|
||||
final PsiFile psiFile = PsiManager.getInstance(project).findFile(vFile);
|
||||
assert psiFile != null;
|
||||
return getDefaultResolveScope(project, psiFile, vFile);
|
||||
}
|
||||
|
||||
private GlobalSearchScope getDefaultResolveScope(@NotNull final Project project, @NotNull PsiFile psiFile, @NotNull final VirtualFile vFile) {
|
||||
return myDefaultResolveScopesCache.get(vFile);
|
||||
}
|
||||
|
||||
private GlobalSearchScope getInherentResolveScope(VirtualFile vFile) {
|
||||
ProjectFileIndex projectFileIndex = myProjectRootManager.getFileIndex();
|
||||
Module module = projectFileIndex.getModuleForFile(vFile);
|
||||
if (module != null) {
|
||||
boolean includeTests = projectFileIndex.isInTestSourceContent(vFile) ||
|
||||
!projectFileIndex.isContentJavaSourceFile(vFile);
|
||||
return GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, includeTests);
|
||||
}
|
||||
else {
|
||||
// resolve references in libraries in context of all modules which contain it
|
||||
List<Module> modulesLibraryUsedIn = new ArrayList<Module>();
|
||||
List<OrderEntry> orderEntries = projectFileIndex.getOrderEntriesForFile(vFile);
|
||||
|
||||
for (OrderEntry entry : orderEntries) {
|
||||
ProgressManager.checkCanceled();
|
||||
|
||||
if (entry instanceof JdkOrderEntry) {
|
||||
return ((ProjectRootManagerEx)myProjectRootManager).getScopeForJdk((JdkOrderEntry)entry);
|
||||
}
|
||||
|
||||
if (entry instanceof LibraryOrderEntry || entry instanceof ModuleOrderEntry) {
|
||||
modulesLibraryUsedIn.add(entry.getOwnerModule());
|
||||
}
|
||||
}
|
||||
|
||||
return ((ProjectRootManagerEx)myProjectRootManager).getScopeForLibraryUsedIn(modulesLibraryUsedIn);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getUseScope(@NotNull PsiElement element) {
|
||||
VirtualFile vFile;
|
||||
final GlobalSearchScope allScope = GlobalSearchScope.allScope(myManager.getProject());
|
||||
if (element instanceof PsiDirectory) {
|
||||
vFile = ((PsiDirectory)element).getVirtualFile();
|
||||
}
|
||||
else {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile == null) return allScope;
|
||||
final VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null) return allScope;
|
||||
vFile = virtualFile.getParent();
|
||||
}
|
||||
|
||||
if (vFile == null) return allScope;
|
||||
ProjectFileIndex projectFileIndex = myProjectRootManager.getFileIndex();
|
||||
Module module = projectFileIndex.getModuleForFile(vFile);
|
||||
if (module != null) {
|
||||
boolean isTest = projectFileIndex.isInTestSourceContent(vFile);
|
||||
return isTest
|
||||
? GlobalSearchScope.moduleTestsWithDependentsScope(module)
|
||||
: GlobalSearchScope.moduleWithDependentsScope(module);
|
||||
}
|
||||
else {
|
||||
final PsiFile f = element.getContainingFile();
|
||||
final VirtualFile vf = f == null ? null : f.getVirtualFile();
|
||||
|
||||
return f == null || vf == null || vf.isDirectory() || allScope.contains(vf)
|
||||
? allScope : GlobalSearchScopes.fileScope(f).uniteWith(allScope);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
public PsiDirectory findDirectory(@NotNull VirtualFile vFile) {
|
||||
LOG.assertTrue(myInitialized, "Access to psi files should be performed only after startup activity");
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.psi.impl.file.impl;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.ex.ProjectRootManagerEx;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiManagerImpl;
|
||||
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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ResolveScopeManager {
|
||||
public static ResolveScopeManager getInstance(Project project) {
|
||||
return ServiceManager.getService(project, ResolveScopeManager.class);
|
||||
}
|
||||
|
||||
public static GlobalSearchScope getElementUseScope(PsiElement element) {
|
||||
return getInstance(element.getProject()).getUseScope(element);
|
||||
}
|
||||
|
||||
public static GlobalSearchScope getElementResolveScope(PsiElement element) {
|
||||
return getInstance(element.getProject()).getResolveScope(element);
|
||||
}
|
||||
|
||||
private final Project myProject;
|
||||
private final ProjectRootManager myProjectRootManager;
|
||||
private final PsiManager myManager;
|
||||
|
||||
private final Map<VirtualFile, GlobalSearchScope> myDefaultResolveScopesCache = new ConcurrentFactoryMap<VirtualFile, GlobalSearchScope>() {
|
||||
@Override
|
||||
protected GlobalSearchScope create(VirtualFile key) {
|
||||
GlobalSearchScope scope = null;
|
||||
for(ResolveScopeProvider resolveScopeProvider: ResolveScopeProvider.EP_NAME.getExtensions()) {
|
||||
scope = resolveScopeProvider.getResolveScope(key, myProject);
|
||||
if (scope != null) break;
|
||||
}
|
||||
if (scope == null) scope = getInherentResolveScope(key);
|
||||
for (ResolveScopeEnlarger enlarger : ResolveScopeEnlarger.EP_NAME.getExtensions()) {
|
||||
final SearchScope extra = enlarger.getAdditionalResolveScope(key, myProject);
|
||||
if (extra != null) {
|
||||
scope = scope.union(extra);
|
||||
}
|
||||
}
|
||||
|
||||
return scope;
|
||||
}
|
||||
};
|
||||
|
||||
public ResolveScopeManager(Project project, ProjectRootManager projectRootManager, PsiManager psiManager) {
|
||||
myProject = project;
|
||||
myProjectRootManager = projectRootManager;
|
||||
myManager = psiManager;
|
||||
|
||||
((PsiManagerImpl) psiManager).registerRunnableToRunOnChange(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myDefaultResolveScopesCache.clear();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private GlobalSearchScope getDefaultResolveScope(@NotNull PsiFile psiFile, @NotNull final VirtualFile vFile) {
|
||||
return myDefaultResolveScopesCache.get(vFile);
|
||||
}
|
||||
|
||||
private GlobalSearchScope getInherentResolveScope(VirtualFile vFile) {
|
||||
ProjectFileIndex projectFileIndex = myProjectRootManager.getFileIndex();
|
||||
Module module = projectFileIndex.getModuleForFile(vFile);
|
||||
if (module != null) {
|
||||
boolean includeTests = projectFileIndex.isInTestSourceContent(vFile) ||
|
||||
!projectFileIndex.isContentJavaSourceFile(vFile);
|
||||
return GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, includeTests);
|
||||
}
|
||||
else {
|
||||
// resolve references in libraries in context of all modules which contain it
|
||||
List<Module> modulesLibraryUsedIn = new ArrayList<Module>();
|
||||
List<OrderEntry> orderEntries = projectFileIndex.getOrderEntriesForFile(vFile);
|
||||
|
||||
for (OrderEntry entry : orderEntries) {
|
||||
ProgressManager.checkCanceled();
|
||||
|
||||
if (entry instanceof JdkOrderEntry) {
|
||||
return ((ProjectRootManagerEx)myProjectRootManager).getScopeForJdk((JdkOrderEntry)entry);
|
||||
}
|
||||
|
||||
if (entry instanceof LibraryOrderEntry || entry instanceof ModuleOrderEntry) {
|
||||
modulesLibraryUsedIn.add(entry.getOwnerModule());
|
||||
}
|
||||
}
|
||||
|
||||
return ((ProjectRootManagerEx)myProjectRootManager).getScopeForLibraryUsedIn(modulesLibraryUsedIn);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope(@NotNull PsiElement element) {
|
||||
ProgressManager.checkCanceled();
|
||||
|
||||
VirtualFile vFile;
|
||||
final PsiFile contextFile;
|
||||
if (element instanceof PsiDirectory) {
|
||||
vFile = ((PsiDirectory)element).getVirtualFile();
|
||||
contextFile = null;
|
||||
}
|
||||
else {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile instanceof PsiCodeFragment) {
|
||||
final GlobalSearchScope forcedScope = ((PsiCodeFragment)containingFile).getForcedResolveScope();
|
||||
if (forcedScope != null) {
|
||||
return forcedScope;
|
||||
}
|
||||
final PsiElement context = containingFile.getContext();
|
||||
if (context == null) {
|
||||
return GlobalSearchScope.allScope(myProject);
|
||||
}
|
||||
return getResolveScope(context);
|
||||
}
|
||||
|
||||
contextFile = containingFile != null ? FileContextUtil.getContextFile(containingFile) : null;
|
||||
if (contextFile == null) {
|
||||
return GlobalSearchScope.allScope(myProject);
|
||||
}
|
||||
else if (contextFile instanceof FileResolveScopeProvider) {
|
||||
return ((FileResolveScopeProvider) contextFile).getFileResolveScope();
|
||||
}
|
||||
vFile = contextFile.getOriginalFile().getVirtualFile();
|
||||
}
|
||||
if (vFile == null || contextFile == null) {
|
||||
return GlobalSearchScope.allScope(myProject);
|
||||
}
|
||||
|
||||
return getDefaultResolveScope(contextFile, vFile);
|
||||
}
|
||||
|
||||
|
||||
public GlobalSearchScope getDefaultResolveScope(final VirtualFile vFile) {
|
||||
final PsiFile psiFile = myManager.findFile(vFile);
|
||||
assert psiFile != null;
|
||||
return getDefaultResolveScope(psiFile, vFile);
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getUseScope(@NotNull PsiElement element) {
|
||||
VirtualFile vFile;
|
||||
final GlobalSearchScope allScope = GlobalSearchScope.allScope(myManager.getProject());
|
||||
if (element instanceof PsiDirectory) {
|
||||
vFile = ((PsiDirectory)element).getVirtualFile();
|
||||
}
|
||||
else {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile == null) return allScope;
|
||||
final VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null) return allScope;
|
||||
vFile = virtualFile.getParent();
|
||||
}
|
||||
|
||||
if (vFile == null) return allScope;
|
||||
ProjectFileIndex projectFileIndex = myProjectRootManager.getFileIndex();
|
||||
Module module = projectFileIndex.getModuleForFile(vFile);
|
||||
if (module != null) {
|
||||
boolean isTest = projectFileIndex.isInTestSourceContent(vFile);
|
||||
return isTest
|
||||
? GlobalSearchScope.moduleTestsWithDependentsScope(module)
|
||||
: GlobalSearchScope.moduleWithDependentsScope(module);
|
||||
}
|
||||
else {
|
||||
final PsiFile f = element.getContainingFile();
|
||||
final VirtualFile vf = f == null ? null : f.getVirtualFile();
|
||||
|
||||
return f == null || vf == null || vf.isDirectory() || allScope.contains(vf)
|
||||
? allScope : GlobalSearchScopes.fileScope(f).uniteWith(allScope);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.*;
|
||||
import com.intellij.psi.impl.file.PsiFileImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.resolve.FileContextUtil;
|
||||
import com.intellij.psi.search.PsiElementProcessor;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
@@ -210,7 +211,7 @@ public abstract class LightPsiFileImpl extends PsiElementBase implements PsiFile
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return ((PsiManagerEx) getManager()).getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
public void navigate(boolean requestFocus) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -36,13 +35,13 @@ import com.intellij.openapi.ui.Queryable;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileWithId;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.*;
|
||||
import com.intellij.psi.impl.cache.impl.CacheUtil;
|
||||
import com.intellij.psi.impl.file.PsiFileImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
||||
import com.intellij.psi.impl.source.resolve.FileContextUtil;
|
||||
import com.intellij.psi.impl.source.tree.*;
|
||||
@@ -818,12 +817,12 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
return ((PsiManagerEx)getManager()).getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return ((PsiManagerEx) getManager()).getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
public ItemPresentation getPresentation() {
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.PsiElementArrayConstructor;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
||||
@@ -212,12 +213,12 @@ public abstract class CompositePsiElement extends CompositeElement implements Ps
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
return getManager().getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return getManager().getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
public ItemPresentation getPresentation() {
|
||||
|
||||
@@ -26,10 +26,10 @@ import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.PsiElementArrayConstructor;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
||||
@@ -241,12 +241,12 @@ public class LazyParseablePsiElement extends LazyParseableElement implements Psi
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
assert isValid();
|
||||
return getManager().getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return getManager().getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
public ItemPresentation getPresentation() {
|
||||
|
||||
@@ -25,11 +25,11 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -216,12 +216,12 @@ public class LeafPsiElement extends LeafElement implements PsiElement, Navigatio
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
return getManager().getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return getManager().getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
import com.intellij.psi.impl.SharedPsiElementImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -193,12 +194,12 @@ public class OwnBufferLeafPsiElement extends LeafElement implements PsiElement {
|
||||
|
||||
@NotNull
|
||||
public GlobalSearchScope getResolveScope() {
|
||||
return getManager().getFileManager().getResolveScope(this);
|
||||
return ResolveScopeManager.getElementResolveScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
return getManager().getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -275,6 +275,8 @@
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.impl.cache.CacheManager"
|
||||
serviceImplementation="com.intellij.psi.impl.cache.impl.IndexCacheManagerImpl"/>
|
||||
<projectService serviceInterface="com.intellij.psi.impl.file.impl.ResolveScopeManager"
|
||||
serviceImplementation="com.intellij.psi.impl.file.impl.ResolveScopeManager"/>
|
||||
|
||||
<colorSettingsPage implementation="com.intellij.openapi.options.colors.pages.GeneralColorsPage" id="general"/>
|
||||
<colorSettingsPage implementation="com.intellij.openapi.options.colors.pages.ANSIColoredConsoleColorsPage" id="general"/>
|
||||
|
||||
@@ -18,7 +18,7 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.search;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.UseScopeEnlarger;
|
||||
@@ -31,8 +31,7 @@ public class GrPrivateFieldScopeEnlarger extends UseScopeEnlarger {
|
||||
@Override
|
||||
public SearchScope getAdditionalUseScope(@NotNull PsiElement element) {
|
||||
if (element instanceof PsiField && ((PsiField)element).hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
final PsiManagerEx psiManager = (PsiManagerEx)element.getManager();
|
||||
final GlobalSearchScope maximalUseScope = psiManager.getFileManager().getUseScope(element);
|
||||
final GlobalSearchScope maximalUseScope = ResolveScopeManager.getElementUseScope(element);
|
||||
return new GrSourceFilterScope(maximalUseScope);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.presentation.java.JavaPresentationUtil;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.stubs.IStubElementType;
|
||||
@@ -171,7 +172,7 @@ public class GrFieldImpl extends GrVariableBaseImpl<GrFieldStub> implements GrFi
|
||||
@NotNull
|
||||
public SearchScope getUseScope() {
|
||||
if (isProperty()) {
|
||||
return getManager().getFileManager().getUseScope(this); //maximal scope
|
||||
return ResolveScopeManager.getElementUseScope(this); //maximal scope
|
||||
}
|
||||
return PsiImplUtil.getMemberUseScope(this);
|
||||
}
|
||||
|
||||
@@ -15,8 +15,11 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.synthetic;
|
||||
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.impl.file.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -80,7 +83,7 @@ public class GrLightField extends GrLightVariable implements GrField {
|
||||
@NotNull
|
||||
@Override
|
||||
public SearchScope getUseScope() {
|
||||
return ((PsiManagerEx) getManager()).getFileManager().getUseScope(this);
|
||||
return ResolveScopeManager.getElementUseScope(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user