From f292c554cb2161eb2f3d1624186e9bedd668d3d5 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 24 Sep 2014 18:40:21 +0400 Subject: [PATCH] Cache result of getAllPossiblePackageClasses() Move this utility from IDELightClassGenerationSupport to PackageIndexUtil --- .../IDELightClassGenerationSupport.java | 22 ---------------- .../jet/plugin/stubindex/PackageIndexUtil.kt | 25 ++++++++++++++++--- .../jet/plugin/caches/JetShortNamesCache.kt | 6 ++--- 3 files changed, 24 insertions(+), 29 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java index 08d4ccc8972..ef933873727 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java @@ -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 jetFileComparator; @@ -233,19 +224,6 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport return KotlinLightClassForExplicitDeclaration.create(classOrObject.getManager(), classOrObject); } - @NotNull - public MultiMap getAllPossiblePackageClasses(@NotNull GlobalSearchScope scope) { - Collection packageFqNames = JetExactPackagesIndex.getInstance().getAllKeys(project); - - MultiMap result = new MultiMap(); - for (String packageFqName : packageFqNames) { - FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(new FqName(packageFqName)); - result.putValue(packageClassFqName.shortName().asString(), packageClassFqName); - } - - return result; - } - @NotNull private static Comparator byScopeComparator(@NotNull final GlobalSearchScope searchScope) { return new Comparator() { diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.kt index b3b17181f77..dd99a65d563 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.kt @@ -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 { + return CachedValuesManager.getManager(project).getCachedValue(project) { + Result(computeAllPossiblePackageClasses(project), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) + }!! + } + + private fun computeAllPossiblePackageClasses(project: Project): MultiMap { + val packageFqNames = JetExactPackagesIndex.getInstance().getAllKeys(project) + val result = MultiMap() + for (packageFqName in packageFqNames) { + val packageClassFqName = PackageClassUtils.getPackageClassFqName(FqName(packageFqName)) + result.putValue(packageClassFqName.shortName().asString(), packageClassFqName) + } + + return result + } } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt index 141a7f53cbf..5aae6e68efa 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt @@ -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 { val result = ArrayList() - 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)