let findClass work in dumb mode in package scope

This commit is contained in:
peter
2017-07-19 18:08:33 +02:00
parent a4db800551
commit 9b9c62c17c
2 changed files with 21 additions and 5 deletions
@@ -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();
}
}
@@ -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);
}
}
}