Cache result of getAllPossiblePackageClasses()
Move this utility from IDELightClassGenerationSupport to PackageIndexUtil
This commit is contained in:
-22
@@ -16,14 +16,12 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.caches.resolve;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import kotlin.Function1;
|
||||
import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -37,7 +35,6 @@ import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -45,7 +42,6 @@ import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.plugin.libraries.JetSourceNavigationHelper;
|
||||
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
||||
import org.jetbrains.jet.plugin.stubindex.JetClassByPackageIndex;
|
||||
import org.jetbrains.jet.plugin.stubindex.JetExactPackagesIndex;
|
||||
import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex;
|
||||
import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil;
|
||||
|
||||
@@ -57,11 +53,6 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(IDELightClassGenerationSupport.class);
|
||||
|
||||
@NotNull
|
||||
public static IDELightClassGenerationSupport getInstanceForIDE(@NotNull Project project) {
|
||||
return (IDELightClassGenerationSupport) ServiceManager.getService(project, LightClassGenerationSupport.class);
|
||||
}
|
||||
|
||||
private final Project project;
|
||||
|
||||
private final Comparator<JetFile> jetFileComparator;
|
||||
@@ -233,19 +224,6 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
|
||||
return KotlinLightClassForExplicitDeclaration.create(classOrObject.getManager(), classOrObject);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MultiMap<String, FqName> getAllPossiblePackageClasses(@NotNull GlobalSearchScope scope) {
|
||||
Collection<String> packageFqNames = JetExactPackagesIndex.getInstance().getAllKeys(project);
|
||||
|
||||
MultiMap<String, FqName> result = new MultiMap<String, FqName>();
|
||||
for (String packageFqName : packageFqNames) {
|
||||
FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(new FqName(packageFqName));
|
||||
result.putValue(packageClassFqName.shortName().asString(), packageClassFqName);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Comparator<JetFile> byScopeComparator(@NotNull final GlobalSearchScope searchScope) {
|
||||
return new Comparator<JetFile>() {
|
||||
|
||||
@@ -17,14 +17,16 @@
|
||||
package org.jetbrains.jet.plugin.stubindex
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.stubs.StubIndex
|
||||
import com.intellij.psi.stubs.StubIndexKey
|
||||
import com.intellij.util.Processor
|
||||
import org.jetbrains.jet.lang.psi.JetFile
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||
import kotlin.platform.platformStatic
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import com.intellij.psi.util.CachedValueProvider.Result
|
||||
import com.intellij.psi.util.PsiModificationTracker
|
||||
|
||||
public object PackageIndexUtil {
|
||||
platformStatic public fun getSubPackageFqNames(
|
||||
@@ -66,4 +68,21 @@ public object PackageIndexUtil {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
platformStatic public fun getAllPossiblePackageClasses(project: Project): MultiMap<String, FqName> {
|
||||
return CachedValuesManager.getManager(project).getCachedValue(project) {
|
||||
Result(computeAllPossiblePackageClasses(project), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
|
||||
}!!
|
||||
}
|
||||
|
||||
private fun computeAllPossiblePackageClasses(project: Project): MultiMap<String, FqName> {
|
||||
val packageFqNames = JetExactPackagesIndex.getInstance().getAllKeys(project)
|
||||
val result = MultiMap<String, FqName>()
|
||||
for (packageFqName in packageFqNames) {
|
||||
val packageClassFqName = PackageClassUtils.getPackageClassFqName(FqName(packageFqName))
|
||||
result.putValue(packageClassFqName.shortName().asString(), packageClassFqName)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,8 +51,7 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
|
||||
val classNames = JetClassShortNameIndex.getInstance().getAllKeys(project)
|
||||
|
||||
// package classes can not be indexed, since they have no explicit declarations
|
||||
val lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project)
|
||||
val packageClassShortNames = lightClassGenerationSupport.getAllPossiblePackageClasses(GlobalSearchScope.allScope(project)).keySet()
|
||||
val packageClassShortNames = PackageIndexUtil.getAllPossiblePackageClasses(project).keySet()
|
||||
classNames.addAll(packageClassShortNames)
|
||||
|
||||
return ArrayUtil.toStringArray(classNames)
|
||||
@@ -64,8 +63,7 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
|
||||
override fun getClassesByName(NonNls name: String, scope: GlobalSearchScope): Array<PsiClass> {
|
||||
val result = ArrayList<PsiClass>()
|
||||
|
||||
val lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project)
|
||||
val packageClasses = lightClassGenerationSupport.getAllPossiblePackageClasses(scope)
|
||||
val packageClasses = PackageIndexUtil.getAllPossiblePackageClasses(project)
|
||||
|
||||
// package classes can not be indexed, since they have no explicit declarations
|
||||
val fqNames = packageClasses.get(name)
|
||||
|
||||
Reference in New Issue
Block a user