diff --git a/java/java-psi-api/src/com/intellij/psi/search/PackageScope.java b/java/java-psi-api/src/com/intellij/psi/search/PackageScope.java index 730458d85c1f..89271e4cdba6 100644 --- a/java/java-psi-api/src/com/intellij/psi/search/PackageScope.java +++ b/java/java-psi-api/src/com/intellij/psi/search/PackageScope.java @@ -58,13 +58,13 @@ public class PackageScope extends GlobalSearchScope { @Override public boolean contains(@NotNull VirtualFile file) { - VirtualFile parent = file.getParent(); + VirtualFile dir = file.isDirectory() ? file : file.getParent(); if (!myIncludeSubpackages) { - if (myDirs.contains(parent)) return true; + if (myDirs.contains(dir)) return true; } else { - while (parent != null) { - if (myDirs.contains(parent)) return true; - parent = parent.getParent(); + while (dir != null) { + if (myDirs.contains(dir)) return true; + dir = dir.getParent(); } } diff --git a/java/java-tests/testSrc/com/intellij/java/psi/impl/cache/impl/FindClassTest.java b/java/java-tests/testSrc/com/intellij/java/psi/impl/cache/impl/FindClassTest.java index ca2c1c275e65..6ba51d5c560e 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/impl/cache/impl/FindClassTest.java +++ b/java/java-tests/testSrc/com/intellij/java/psi/impl/cache/impl/FindClassTest.java @@ -24,6 +24,8 @@ import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.StdModuleTypes; +import com.intellij.openapi.project.DumbService; +import com.intellij.openapi.project.DumbServiceImpl; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; @@ -34,6 +36,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PackageScope; import com.intellij.psi.util.FindClassUtil; import com.intellij.testFramework.PsiTestCase; import com.intellij.testFramework.PsiTestUtil; @@ -193,4 +196,17 @@ public class FindClassTest extends PsiTestCase { return newModules; } + public void testFindClassInDumbMode() { + try { + DumbServiceImpl.getInstance(myProject).setDumb(true); + DumbService.getInstance(myProject).withAlternativeResolveEnabled(() -> { + assertNotNull(myJavaFacade.findClass("p.A", GlobalSearchScope.allScope(myProject))); + assertNotNull(myJavaFacade.findClass("p.A", new PackageScope(myJavaFacade.findPackage("p"), true, true))); + }); + } + finally { + DumbServiceImpl.getInstance(myProject).setDumb(false); + } + } + }