Fir2Ir: make sure Fir2IrLazyClass gets registered in symbol table
This commit is contained in:
committed by
Alexander Udalov
parent
1fbd79e310
commit
49bd3c1758
@@ -501,22 +501,22 @@ class Fir2IrClassifierStorage(
|
|||||||
return createLocalIrClassOnTheFly(firClass).symbol
|
return createLocalIrClassOnTheFly(firClass).symbol
|
||||||
}
|
}
|
||||||
val signature = signatureComposer.composeSignature(firClass)!!
|
val signature = signatureComposer.composeSignature(firClass)!!
|
||||||
symbolTable.referenceClassIfAny(signature)?.takeIf { it.isBound }?.let { irClassSymbol ->
|
val symbol = symbolTable.referenceClass(signature)
|
||||||
val irClass = irClassSymbol.owner
|
if (symbol.isBound) {
|
||||||
|
val irClass = symbol.owner
|
||||||
classCache[firClass as FirRegularClass] = irClass
|
classCache[firClass as FirRegularClass] = irClass
|
||||||
val mappedTypeParameters = firClass.typeParameters.filterIsInstance<FirTypeParameter>().zip(irClass.typeParameters)
|
val mappedTypeParameters = firClass.typeParameters.filterIsInstance<FirTypeParameter>().zip(irClass.typeParameters)
|
||||||
for ((firTypeParameter, irTypeParameter) in mappedTypeParameters) {
|
for ((firTypeParameter, irTypeParameter) in mappedTypeParameters) {
|
||||||
typeParameterCache[firTypeParameter] = irTypeParameter
|
typeParameterCache[firTypeParameter] = irTypeParameter
|
||||||
}
|
}
|
||||||
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
|
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
|
||||||
return irClassSymbol
|
return symbol
|
||||||
}
|
}
|
||||||
firClass as FirRegularClass
|
firClass as FirRegularClass
|
||||||
val classId = firClassSymbol.classId
|
val classId = firClassSymbol.classId
|
||||||
val parentId = classId.outerClassId
|
val parentId = classId.outerClassId
|
||||||
val parentClass = parentId?.let { session.symbolProvider.getClassLikeSymbolByClassId(it) }
|
val parentClass = parentId?.let { session.symbolProvider.getClassLikeSymbolByClassId(it) }
|
||||||
val irParent = declarationStorage.findIrParent(classId.packageFqName, parentClass?.toLookupTag(), firClassSymbol, firClass.origin)!!
|
val irParent = declarationStorage.findIrParent(classId.packageFqName, parentClass?.toLookupTag(), firClassSymbol, firClass.origin)!!
|
||||||
val symbol = Fir2IrClassSymbol(signature)
|
|
||||||
val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
|
val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
|
||||||
symbolTable.declareClass(signature, { symbol }) {
|
symbolTable.declareClass(signature, { symbol }) {
|
||||||
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, symbol).apply {
|
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.isNewPlaceForBodyGeneration
|
||||||
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
|
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
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.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.isNullableAny
|
import org.jetbrains.kotlin.fir.types.isNullableAny
|
||||||
@@ -40,7 +39,7 @@ class Fir2IrLazyClass(
|
|||||||
override val endOffset: Int,
|
override val endOffset: Int,
|
||||||
override var origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val fir: FirRegularClass,
|
override val fir: FirRegularClass,
|
||||||
override val symbol: Fir2IrClassSymbol,
|
override val symbol: IrClassSymbol,
|
||||||
) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer,
|
) : IrClass(), AbstractFir2IrLazyDeclaration<FirRegularClass>, Fir2IrTypeParametersContainer,
|
||||||
IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components {
|
IrMaybeDeserializedClass, DeserializableClass, Fir2IrComponents by components {
|
||||||
init {
|
init {
|
||||||
|
|||||||
Reference in New Issue
Block a user