IR: fix origin of default getter of Enum.entries synthetic property

This commit is contained in:
Mikhail Glukhikh
2022-08-16 12:05:08 +02:00
committed by Space
parent 28c83e43ad
commit 8a4105e542
9 changed files with 15 additions and 13 deletions
@@ -854,8 +854,8 @@ class Fir2IrDeclarationStorage(
containingClass: ConeClassLikeLookupTag? = (irParent as? IrClass)?.classId?.let { ConeClassLikeLookupTagImpl(it) },
forceTopLevelPrivate: Boolean = false,
): IrProperty = convertCatching(property) {
val origin = if (property.isStatic && property.name in ENUM_SYNTHETIC_NAMES)
IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER
val origin =
if (property.isStatic && property.name in ENUM_SYNTHETIC_NAMES) IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER
else property.computeIrOrigin(predefinedOrigin)
// See similar comments in createIrFunction above
val signature =
@@ -934,6 +934,7 @@ class Fir2IrDeclarationStorage(
getter, property, this, type, irParent, thisReceiverOwner, false,
when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
origin == IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER -> origin
delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin
@@ -170,7 +170,8 @@ internal class ClassMemberGenerator(
when {
// Create fake bodies for Enum.values/Enum.valueOf
irFunction.origin == IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER -> {
val kind = Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES.getValue(irFunction.name)
val name = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name ?: irFunction.name
val kind = Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES.getValue(name)
irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind)
}
irFunction.parent is IrClass && irFunction.parentAsClass.isData -> {