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 {
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 FirPackageMemberScope -> KtFirPackageScope(
firScope.fqName,
@@ -5,26 +5,29 @@
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.tokens.ValidityToken
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.weakRef
import org.jetbrains.kotlin.analysis.api.scopes.KtNonStarImportingScope
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.scopes.NonStarImport
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
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.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
internal class KtFirNonStarImportingScope(
private val firScope : FirAbstractSimpleImportingScope,
private val firScope: FirAbstractSimpleImportingScope,
private val builder: KtSymbolByFirBuilder,
override val token: ValidityToken
override val token: ValidityToken,
private val firSession: FirSession
) : KtNonStarImportingScope, ValidityTokenOwner {
@OptIn(ExperimentalStdlibApi::class)
@@ -32,10 +35,15 @@ internal class KtFirNonStarImportingScope(
buildList {
firScope.simpleImports.values.forEach { imports ->
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(
import.packageFqName,
import.relativeParentClassName,
import.resolvedParentClassId,
importedClassId?.relativeClassName,
importedClassId,
import.importedName
).let(::add)
}