From fa6bfe932e9ad4289cf733bf0a41e80eda7afc4e Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 30 Jan 2017 20:02:35 +0100 Subject: [PATCH] More efficient implementation of containsFilesWithExactPackage() (don't materialize KtFile instances we don't actually need) --- idea/idea-analysis/idea-analysis.iml | 2 +- .../kotlin/idea/stubindex/PackageIndexUtil.kt | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/idea/idea-analysis/idea-analysis.iml b/idea/idea-analysis/idea-analysis.iml index d17a8482c7e..3523fabbbf3 100644 --- a/idea/idea-analysis/idea-analysis.iml +++ b/idea/idea-analysis/idea-analysis.iml @@ -15,7 +15,6 @@ - @@ -35,5 +34,6 @@ + \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/PackageIndexUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/PackageIndexUtil.kt index a0775e82b0d..e47b8bf0bef 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/PackageIndexUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/PackageIndexUtil.kt @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.idea.stubindex import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.newvfs.persistent.PersistentFS +import com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubIndex import org.jetbrains.kotlin.name.FqName @@ -60,13 +62,17 @@ object PackageIndexUtil { searchScope: GlobalSearchScope, project: Project ): Boolean { - var result = false - StubIndex.getInstance().processElements( - KotlinExactPackagesIndex.getInstance().key, packageFqName.asString(), project, searchScope, KtFile::class.java - ) { - result = true - false + val ids = StubIndex.getInstance().getContainingIds(KotlinExactPackagesIndex.getInstance().key, + packageFqName.asString(), + project, + searchScope) + val fs = PersistentFS.getInstance() as PersistentFSImpl + while (ids.hasNext()) { + val file = fs.findFileByIdIfCached(ids.next()) + if (file != null && file in searchScope) { + return true + } } - return result + return false } }