FIR: don't copy initializer for field override, unwrap it instead

This commit is contained in:
Mikhail Glukhikh
2022-11-25 10:44:54 +01:00
committed by Space Team
parent c698d060c6
commit 237f357016
4 changed files with 4 additions and 8 deletions
@@ -1110,7 +1110,7 @@ class Fir2IrDeclarationStorage(
} else {
fieldStaticOverrideCache[field.name to classId] = this
}
val initializer = field.initializer
val initializer = field.unwrapFakeOverrides().initializer
if (initializer is FirConstExpression<*>) {
this.initializer = factory.createExpressionBody(initializer.toIrConst(type))
}
@@ -173,7 +173,7 @@ class FakeOverrideGenerator(
FirFakeOverrideGenerator.createSubstitutionOverrideField(
session, firField, callableSymbol,
newReturnType = firField.returnTypeRef.coneType,
firClass.symbol.classId, withInitializer = true
derivedClassId = firClass.symbol.classId
)
},
baseStaticFieldSymbols,
@@ -311,7 +311,7 @@ class FirClassSubstitutionScope(
val newReturnType = returnType?.substitute() ?: return original
return FirFakeOverrideGenerator.createSubstitutionOverrideField(
session, member, original, newReturnType, newOwnerClassId, withInitializer = false
session, member, original, newReturnType, newOwnerClassId
)
}
@@ -487,8 +487,7 @@ object FirFakeOverrideGenerator {
baseField: FirField,
baseSymbol: FirFieldSymbol,
newReturnType: ConeKotlinType?,
derivedClassId: ClassId?,
withInitializer: Boolean
derivedClassId: ClassId?
): FirFieldSymbol {
val symbol = FirFieldSymbol(
CallableId(derivedClassId ?: baseSymbol.callableId.classId!!, baseField.name)
@@ -508,9 +507,6 @@ object FirFakeOverrideGenerator {
annotations += baseField.annotations
attributes = baseField.attributes.copy()
dispatchReceiverType = baseField.dispatchReceiverType
if (withInitializer) {
initializer = baseField.initializer
}
}.apply {
originalForSubstitutionOverrideAttr = baseField
if (isStatic && derivedClassId != null) {