diff --git a/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java b/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java index aa9c9801cc21..ffd04e83b4ae 100644 --- a/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java +++ b/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java @@ -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 result = new ArrayList(); 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); } diff --git a/java/java-tests/testSrc/com/intellij/psi/CoreJavaFileManagerTest.java b/java/java-tests/testSrc/com/intellij/psi/CoreJavaFileManagerTest.java index b7ebf4a1e10b..6c61515bfee1 100644 --- a/java/java-tests/testSrc/com/intellij/psi/CoreJavaFileManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/CoreJavaFileManagerTest.java @@ -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);