From 3b78e3eb9992abacf917bfe4d2d587f8be19eb4a Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 19 Aug 2014 15:22:33 +0400 Subject: [PATCH] Introduce PackageIndexUtil#packageExists() Use it in IDELightClassGenerationSupport and PluginDeclarationProviderFactory --- .../IDELightClassGenerationSupport.java | 2 +- .../plugin/stubindex/PackageIndexUtil.java | 21 +++++++++++++++++++ .../PluginDeclarationProviderFactory.kt | 9 +++----- 3 files changed, 25 insertions(+), 7 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 82a57126c76..4894e449bcf 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 @@ -179,7 +179,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport @Override public boolean packageExists(@NotNull FqName fqName, @NotNull GlobalSearchScope scope) { - return !JetAllPackagesIndex.getInstance().get(fqName.asString(), project, kotlinSources(scope, project)).isEmpty(); + return PackageIndexUtil.packageExists(fqName, kotlinSources(scope, project), project); } @NotNull diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java index 1f1a9d51579..e9c2c1b7b18 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java @@ -19,7 +19,10 @@ package org.jetbrains.jet.plugin.stubindex; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.Ref; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.stubs.StubIndex; +import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetFile; @@ -70,6 +73,24 @@ public final class PackageIndexUtil { }); } + public static boolean packageExists( + @NotNull FqName packageFqName, + @NotNull GlobalSearchScope searchScope, + @NotNull Project project + ) { + final Ref result = new Ref(false); + StubIndex.getInstance().processElements( + JetAllPackagesIndex.getInstance().getKey(), packageFqName.asString(), project, searchScope, JetFile.class, + new Processor() { + @Override + public boolean process(JetFile file) { + result.set(true); + return false; + } + }); + return result.get(); + } + private PackageIndexUtil() { } } diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt index 0215a6918be..4fb7f5a48b4 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt @@ -22,8 +22,8 @@ import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo import org.jetbrains.jet.lang.resolve.lazy.declarations.* import org.jetbrains.jet.lang.resolve.name.FqName -import org.jetbrains.jet.plugin.stubindex.JetAllPackagesIndex import org.jetbrains.jet.storage.StorageManager +import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil public class PluginDeclarationProviderFactory( private val project: Project, @@ -49,11 +49,8 @@ public class PluginDeclarationProviderFactory( } private fun getStubBasedPackageMemberDeclarationProvider(name: FqName): PackageMemberDeclarationProvider? { - //TODO: better check - val files = JetAllPackagesIndex.getInstance().get(name.asString(), project, indexedFilesScope) - if (files.isEmpty()) { - return null - } + if (!PackageIndexUtil.packageExists(name, indexedFilesScope, project)) return null + return StubBasedPackageMemberDeclarationProvider(name, project, indexedFilesScope) } }