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;
|
package org.jetbrains.jet.plugin.caches.resolve;
|
||||||
|
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import com.intellij.util.containers.MultiMap;
|
|
||||||
import kotlin.Function1;
|
import kotlin.Function1;
|
||||||
import kotlin.KotlinPackage;
|
import kotlin.KotlinPackage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.descriptors.VariableDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.ForceResolveUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
|
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
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.libraries.JetSourceNavigationHelper;
|
||||||
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
||||||
import org.jetbrains.jet.plugin.stubindex.JetClassByPackageIndex;
|
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.JetFullClassNameIndex;
|
||||||
import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil;
|
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);
|
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 Project project;
|
||||||
|
|
||||||
private final Comparator<JetFile> jetFileComparator;
|
private final Comparator<JetFile> jetFileComparator;
|
||||||
@@ -233,19 +224,6 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
|
|||||||
return KotlinLightClassForExplicitDeclaration.create(classOrObject.getManager(), classOrObject);
|
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
|
@NotNull
|
||||||
private static Comparator<JetFile> byScopeComparator(@NotNull final GlobalSearchScope searchScope) {
|
private static Comparator<JetFile> byScopeComparator(@NotNull final GlobalSearchScope searchScope) {
|
||||||
return new Comparator<JetFile>() {
|
return new Comparator<JetFile>() {
|
||||||
|
|||||||
@@ -17,14 +17,16 @@
|
|||||||
package org.jetbrains.jet.plugin.stubindex
|
package org.jetbrains.jet.plugin.stubindex
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.Ref
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.stubs.StubIndex
|
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.psi.JetFile
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
import kotlin.platform.platformStatic
|
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 {
|
public object PackageIndexUtil {
|
||||||
platformStatic public fun getSubPackageFqNames(
|
platformStatic public fun getSubPackageFqNames(
|
||||||
@@ -66,4 +68,21 @@ public object PackageIndexUtil {
|
|||||||
}
|
}
|
||||||
return result
|
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)
|
val classNames = JetClassShortNameIndex.getInstance().getAllKeys(project)
|
||||||
|
|
||||||
// package classes can not be indexed, since they have no explicit declarations
|
// package classes can not be indexed, since they have no explicit declarations
|
||||||
val lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project)
|
val packageClassShortNames = PackageIndexUtil.getAllPossiblePackageClasses(project).keySet()
|
||||||
val packageClassShortNames = lightClassGenerationSupport.getAllPossiblePackageClasses(GlobalSearchScope.allScope(project)).keySet()
|
|
||||||
classNames.addAll(packageClassShortNames)
|
classNames.addAll(packageClassShortNames)
|
||||||
|
|
||||||
return ArrayUtil.toStringArray(classNames)
|
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> {
|
override fun getClassesByName(NonNls name: String, scope: GlobalSearchScope): Array<PsiClass> {
|
||||||
val result = ArrayList<PsiClass>()
|
val result = ArrayList<PsiClass>()
|
||||||
|
|
||||||
val lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project)
|
val packageClasses = PackageIndexUtil.getAllPossiblePackageClasses(project)
|
||||||
val packageClasses = lightClassGenerationSupport.getAllPossiblePackageClasses(scope)
|
|
||||||
|
|
||||||
// package classes can not be indexed, since they have no explicit declarations
|
// package classes can not be indexed, since they have no explicit declarations
|
||||||
val fqNames = packageClasses.get(name)
|
val fqNames = packageClasses.get(name)
|
||||||
|
|||||||
Reference in New Issue
Block a user