mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CoreJavaFileManager: check scope when searching for classes
This commit is contained in:
@@ -84,7 +84,7 @@ public class CoreJavaFileManager implements JavaFileManager {
|
||||
@Override
|
||||
public PsiClass findClass(@NotNull String qName, @NotNull GlobalSearchScope scope) {
|
||||
for (VirtualFile root : roots()) {
|
||||
final PsiClass psiClass = findClassInClasspathRoot(qName, root, myPsiManager);
|
||||
final PsiClass psiClass = findClassInClasspathRoot(qName, root, myPsiManager, scope);
|
||||
if (psiClass != null) {
|
||||
return psiClass;
|
||||
}
|
||||
@@ -93,7 +93,10 @@ public class CoreJavaFileManager implements JavaFileManager {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiClass findClassInClasspathRoot(String qName, VirtualFile root, PsiManager psiManager) {
|
||||
public static PsiClass findClassInClasspathRoot(@NotNull String qName,
|
||||
@NotNull VirtualFile root,
|
||||
@NotNull PsiManager psiManager,
|
||||
@NotNull GlobalSearchScope scope) {
|
||||
String pathRest = qName;
|
||||
VirtualFile cur = root;
|
||||
|
||||
@@ -122,6 +125,9 @@ public class CoreJavaFileManager implements JavaFileManager {
|
||||
LOG.error("Invalid child of valid parent: " + vFile.getPath() + "; " + root.isValid() + " path=" + root.getPath());
|
||||
return null;
|
||||
}
|
||||
if (!scope.contains(vFile)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final PsiFile file = psiManager.findFile(vFile);
|
||||
if (!(file instanceof PsiClassOwner)) {
|
||||
@@ -176,7 +182,7 @@ public class CoreJavaFileManager implements JavaFileManager {
|
||||
public PsiClass[] findClasses(@NotNull String qName, @NotNull GlobalSearchScope scope) {
|
||||
List<PsiClass> result = new ArrayList<PsiClass>();
|
||||
for (VirtualFile file : roots()) {
|
||||
final PsiClass psiClass = findClassInClasspathRoot(qName, file, myPsiManager);
|
||||
final PsiClass psiClass = findClassInClasspathRoot(qName, file, myPsiManager, scope);
|
||||
if (psiClass != null) {
|
||||
result.add(psiClass);
|
||||
}
|
||||
|
||||
@@ -174,6 +174,13 @@ public class CoreJavaFileManagerTest extends PsiTestCase {
|
||||
assertCannotFind(manager, "foo.Three");
|
||||
}
|
||||
|
||||
public void testScopeCheck() throws Exception {
|
||||
CoreJavaFileManager manager = configureManager("package foo;\n\n" + "public class Test {}\n", "Test");
|
||||
|
||||
assertNotNull("Should find class in all scope", manager.findClass("foo.Test", GlobalSearchScope.allScope(getProject())));
|
||||
assertNull("Should not find class in empty scope", manager.findClass("foo.Test", GlobalSearchScope.EMPTY_SCOPE));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private CoreJavaFileManager configureManager(@Language("JAVA") @NotNull String text, @NotNull String className) throws Exception {
|
||||
VirtualFile root = PsiTestUtil.createTestProjectStructure(myProject, myModule, myFilesToDelete);
|
||||
|
||||
Reference in New Issue
Block a user