FIR IDE: fix KtFirNonStarImportingScope

This commit is contained in:
Tianyu Geng
2021-08-20 12:47:41 -07:00
committed by Ilya Kirillov
parent 211544e790
commit 72a4687990
2 changed files with 17 additions and 9 deletions
@@ -182,7 +182,7 @@ internal class KtFirScopeProvider(
private fun convertToKtScope(firScope: FirScope): KtScope { private fun convertToKtScope(firScope: FirScope): KtScope {
return when (firScope) { return when (firScope) {
is FirAbstractSimpleImportingScope -> KtFirNonStarImportingScope(firScope, builder, token) is FirAbstractSimpleImportingScope -> KtFirNonStarImportingScope(firScope, builder, token, analysisSession.rootModuleSession)
is FirAbstractStarImportingScope -> KtFirStarImportingScope(firScope, builder, project, token) is FirAbstractStarImportingScope -> KtFirStarImportingScope(firScope, builder, project, token)
is FirPackageMemberScope -> KtFirPackageScope( is FirPackageMemberScope -> KtFirPackageScope(
firScope.fqName, firScope.fqName,
@@ -5,26 +5,29 @@
package org.jetbrains.kotlin.analysis.api.fir.scopes package org.jetbrains.kotlin.analysis.api.fir.scopes
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractSimpleImportingScope
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultSimpleImportingScope
import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.fir.utils.weakRef
import org.jetbrains.kotlin.analysis.api.scopes.KtNonStarImportingScope import org.jetbrains.kotlin.analysis.api.scopes.KtNonStarImportingScope
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.scopes.NonStarImport import org.jetbrains.kotlin.analysis.api.scopes.NonStarImport
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.withValidityAssertion import org.jetbrains.kotlin.analysis.api.withValidityAssertion
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.symbolProvider
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractSimpleImportingScope
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultSimpleImportingScope
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal class KtFirNonStarImportingScope( internal class KtFirNonStarImportingScope(
private val firScope : FirAbstractSimpleImportingScope, private val firScope: FirAbstractSimpleImportingScope,
private val builder: KtSymbolByFirBuilder, private val builder: KtSymbolByFirBuilder,
override val token: ValidityToken override val token: ValidityToken,
private val firSession: FirSession
) : KtNonStarImportingScope, ValidityTokenOwner { ) : KtNonStarImportingScope, ValidityTokenOwner {
@OptIn(ExperimentalStdlibApi::class) @OptIn(ExperimentalStdlibApi::class)
@@ -32,10 +35,15 @@ internal class KtFirNonStarImportingScope(
buildList { buildList {
firScope.simpleImports.values.forEach { imports -> firScope.simpleImports.values.forEach { imports ->
imports.forEach { import -> imports.forEach { import ->
val importedClassId = import.importedName?.let { importedName ->
val importedClassId =
import.resolvedParentClassId?.createNestedClassId(importedName) ?: ClassId(import.packageFqName, importedName)
importedClassId.takeIf { firSession.symbolProvider.getClassLikeSymbolByClassId(it) != null }
}
NonStarImport( NonStarImport(
import.packageFqName, import.packageFqName,
import.relativeParentClassName, importedClassId?.relativeClassName,
import.resolvedParentClassId, importedClassId,
import.importedName import.importedName
).let(::add) ).let(::add)
} }