Optimize top level class searching in LazyJavaPackageScope
Do not try to search something, that is known not to exist
This commit is contained in:
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
import java.util.Set;
|
||||
|
||||
public class JavaClassFinderImpl implements JavaClassFinder {
|
||||
private Project project;
|
||||
@@ -108,4 +109,10 @@ public class JavaClassFinderImpl implements JavaClassFinder {
|
||||
PsiPackage psiPackage = javaFacade.findPackage(fqName.asString(), javaSearchScope);
|
||||
return psiPackage == null ? null : new JavaPackageImpl(psiPackage, javaSearchScope);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Set<String> knownClassNamesInPackage(@NotNull FqName packageFqName) {
|
||||
return javaFacade.knownClassNamesInPackage(packageFqName);
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -20,7 +20,10 @@ import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.impl.file.impl.JavaFileManager
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
interface KotlinCliJavaFileManager : JavaFileManager {
|
||||
fun findClass(classId: ClassId, searchScope: GlobalSearchScope): PsiClass?
|
||||
|
||||
fun knownClassNamesInPackage(packageFqName: FqName): Set<String>?
|
||||
}
|
||||
@@ -40,12 +40,15 @@ import kotlin.collections.ArraysKt;
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
||||
import org.jetbrains.kotlin.name.ClassId;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
public class KotlinJavaPsiFacade {
|
||||
@@ -112,6 +115,17 @@ public class KotlinJavaPsiFacade {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Set<String> knownClassNamesInPackage(@NotNull FqName packageFqName) {
|
||||
KotlinPsiElementFinderWrapper[] finders = finders();
|
||||
|
||||
if (finders.length == 1) {
|
||||
return ((KotlinPsiElementFinderImpl) finders[0]).knownClassNamesInPackage(packageFqName);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PsiClass[] findClassesInDumbMode(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
String packageName = StringUtil.getPackageName(qualifiedName);
|
||||
@@ -328,6 +342,15 @@ public class KotlinJavaPsiFacade {
|
||||
return findClass(classId.asSingleFqName().asString(), scope);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Set<String> knownClassNamesInPackage(@NotNull FqName packageFqName) {
|
||||
if (isCliFileManager) {
|
||||
return ((KotlinCliJavaFileManager) javaFileManager).knownClassNamesInPackage(packageFqName);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiPackage findPackage(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
if (isCliFileManager) {
|
||||
|
||||
Reference in New Issue
Block a user