Limit search scope in DecompiledNavigationUtils

To avoid finding classes that are not under relevant roots
This commit is contained in:
Pavel V. Talanov
2014-12-10 18:27:55 +03:00
parent 08241f508e
commit 2fec18ffa7
2 changed files with 6 additions and 4 deletions
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
@@ -27,11 +28,13 @@ import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
import org.jetbrains.jet.plugin.decompiler.DecompilerPackage;
import org.jetbrains.jet.plugin.decompiler.JetClsFile;
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName;
@@ -77,7 +80,8 @@ public final class DecompiledNavigationUtils {
if (containerFqName == null) {
return null;
}
VirtualFileFinder fileFinder = VirtualFileFinder.SERVICE.getInstance(project);
GlobalSearchScope scopeToSearchIn = JetSourceFilterScope.kotlinSourceAndClassFiles(GlobalSearchScope.allScope(project), project);
VirtualFileFinder fileFinder = VirtualFileFinderFactory.SERVICE.getInstance(project).create(scopeToSearchIn);
VirtualFile virtualFile = fileFinder.findVirtualFileWithHeader(containerFqName);
if (virtualFile == null) {
return null;
@@ -28,7 +28,6 @@ import org.jetbrains.jet.plugin.stubindex.JetSuperClassIndex
import org.jetbrains.jet.lang.resolve.*
import java.util.Collections
import org.jetbrains.jet.plugin.search.fileScope
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass, DirectClassInheritorsSearch.SearchParameters>(true) {
public override fun processQuery(queryParameters: DirectClassInheritorsSearch.SearchParameters, consumer: Processor<PsiClass>) {
@@ -47,8 +46,7 @@ public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass,
if (scope == null) return
ApplicationManager.getApplication()?.runReadAction {
val noLibrarySourceScope = JetSourceFilterScope.kotlinSourceAndClassFiles(scope, baseClass.getProject())
JetSuperClassIndex.getInstance().get(name, baseClass.getProject(), noLibrarySourceScope).stream()
JetSuperClassIndex.getInstance().get(name, baseClass.getProject(), scope).stream()
.map { candidate -> JetSourceNavigationHelper.getOriginalPsiClassOrCreateLightClass(candidate)}
.filterNotNull()
.filter { candidate -> candidate.isInheritor(baseClass, false) }