Fir2Ir: make sure Fir2IrLazyClass gets registered in symbol table

This commit is contained in:
Georgy Bronnikov
2022-01-12 19:37:29 +03:00
committed by Alexander Udalov
parent 1fbd79e310
commit 49bd3c1758
2 changed files with 5 additions and 6 deletions
@@ -501,22 +501,22 @@ class Fir2IrClassifierStorage(
return createLocalIrClassOnTheFly(firClass).symbol
}
val signature = signatureComposer.composeSignature(firClass)!!
symbolTable.referenceClassIfAny(signature)?.takeIf { it.isBound }?.let { irClassSymbol ->
val irClass = irClassSymbol.owner
val symbol = symbolTable.referenceClass(signature)
if (symbol.isBound) {
val irClass = symbol.owner
classCache[firClass as FirRegularClass] = irClass
val mappedTypeParameters = firClass.typeParameters.filterIsInstance<FirTypeParameter>().zip(irClass.typeParameters)
for ((firTypeParameter, irTypeParameter) in mappedTypeParameters) {
typeParameterCache[firTypeParameter] = irTypeParameter
}
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
return irClassSymbol
return symbol
}
firClass as FirRegularClass
val classId = firClassSymbol.classId
val parentId = classId.outerClassId
val parentClass = parentId?.let { session.symbolProvider.getClassLikeSymbolByClassId(it) }
val irParent = declarationStorage.findIrParent(classId.packageFqName, parentClass?.toLookupTag(), firClassSymbol, firClass.origin)!!
val symbol = Fir2IrClassSymbol(signature)
val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
symbolTable.declareClass(signature, { symbol }) {
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, symbol).apply {
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
import org.jetbrains.kotlin.fir.isNewPlaceForBodyGeneration
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.isNullableAny
@@ -40,7 +39,7 @@ class Fir2IrLazyClass(
override val endOffset: Int,
override var origin: IrDeclarationOrigin,
override val fir: FirRegularClass,
override val symbol: Fir2IrClassSymbol,
override val symbol: IrClassSymbol,
) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer,
IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components {
init {