Move PackageIndexHelper to KtFirStarImportingScope.kt

This commit is contained in:
Roman Golyshev
2020-07-10 13:12:55 +03:00
committed by Ilya Kirillov
parent d2fbd8e338
commit b90503decb
2 changed files with 23 additions and 27 deletions
@@ -7,9 +7,7 @@ package org.jetbrains.kotlin.idea.completion
import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.openapi.project.Project
import com.intellij.patterns.PlatformPatterns
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.ProcessingContext
import org.jetbrains.kotlin.idea.frontend.api.getAnalysisSessionFor
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
@@ -18,11 +16,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPossibleExtensionSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.isExtension
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyByPackageIndex
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
@@ -87,22 +80,4 @@ private fun KtCallableSymbol.canBeCalledWith(implicitReceivers: List<KtType>): B
val requiredReceiverType = receiverType ?: error("Receiver type should be present")
return implicitReceivers.any { it.isSubTypeOf(requiredReceiverType) }
}
class PackageIndexHelper(private val project: Project) {
//todo use more concrete scope
private val searchScope = GlobalSearchScope.allScope(project)
private val functionByPackageIndex = KotlinTopLevelFunctionByPackageIndex.getInstance()
private val propertyByPackageIndex = KotlinTopLevelPropertyByPackageIndex.getInstance()
fun getPackageTopLevelNames(packageFqName: FqName): Set<Name> {
return getTopLevelCallables(packageFqName).mapTo(mutableSetOf()) { it.nameAsSafeName }
}
@OptIn(ExperimentalStdlibApi::class)
private fun getTopLevelCallables(packageFqName: FqName): List<KtCallableDeclaration> = buildList {
addAll(functionByPackageIndex.get(packageFqName.asString(), project, searchScope))
addAll(propertyByPackageIndex.get(packageFqName.asString(), project, searchScope))
}
}
}
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope
import org.jetbrains.kotlin.idea.completion.PackageIndexHelper
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
@@ -17,7 +17,11 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.Import
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtStarImportingScope
import org.jetbrains.kotlin.idea.frontend.api.scopes.StarImport
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyByPackageIndex
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtCallableDeclaration
internal class KtFirStarImportingScope(
firScope: FirAbstractStarImportingScope,
@@ -58,3 +62,20 @@ internal class KtFirStarImportingScope(
}
}
private class PackageIndexHelper(private val project: Project) {
//todo use more concrete scope
private val searchScope = GlobalSearchScope.allScope(project)
private val functionByPackageIndex = KotlinTopLevelFunctionByPackageIndex.getInstance()
private val propertyByPackageIndex = KotlinTopLevelPropertyByPackageIndex.getInstance()
fun getPackageTopLevelNames(packageFqName: FqName): Set<Name> {
return getTopLevelCallables(packageFqName).mapTo(mutableSetOf()) { it.nameAsSafeName }
}
private fun getTopLevelCallables(packageFqName: FqName): Sequence<KtCallableDeclaration> = sequence<KtCallableDeclaration> {
yieldAll(functionByPackageIndex.get(packageFqName.asString(), project, searchScope))
yieldAll(propertyByPackageIndex.get(packageFqName.asString(), project, searchScope))
}
}