diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index b09d46c797d..ec688f859aa 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -235,7 +235,7 @@ class ClassGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGe } private fun generateAdditionalMembersForEnumClass(irClass: IrClass) { - EnumClassMembersGenerator(context).generateSpecialMembers(irClass) + EnumClassMembersGenerator(declarationGenerator).generateSpecialMembers(irClass) } private fun generatePrimaryConstructor(irClass: IrClass, ktClassOrObject: KtClassOrObject): IrConstructor? { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/EnumClassMembersGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/EnumClassMembersGenerator.kt index 39e41036e6a..d56ee3ebc75 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/EnumClassMembersGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/EnumClassMembersGenerator.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind import org.jetbrains.kotlin.ir.expressions.impl.IrSyntheticBodyImpl import org.jetbrains.kotlin.psi2ir.findFirstFunction -class EnumClassMembersGenerator(override val context: GeneratorContext) : Generator { +class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) { fun generateSpecialMembers(irClass: IrClass) { generateValues(irClass) generateValueOf(irClass) @@ -42,8 +42,9 @@ class EnumClassMembersGenerator(override val context: GeneratorContext) : Genera irClass.startOffset, irClass.endOffset, IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER, valuesFunction - ).apply { - body = IrSyntheticBodyImpl(irClass.startOffset, irClass.endOffset, IrSyntheticBodyKind.ENUM_VALUES) + ).also { irFunction -> + FunctionGenerator(declarationGenerator).generateFunctionParameterDeclarations(irFunction, null, null) + irFunction.body = IrSyntheticBodyImpl(irClass.startOffset, irClass.endOffset, IrSyntheticBodyKind.ENUM_VALUES) } ) } @@ -60,8 +61,9 @@ class EnumClassMembersGenerator(override val context: GeneratorContext) : Genera UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER, valueOfFunction - ).apply { - body = IrSyntheticBodyImpl(irClass.startOffset, irClass.endOffset, IrSyntheticBodyKind.ENUM_VALUEOF) + ).also { irFunction -> + FunctionGenerator(declarationGenerator).generateFunctionParameterDeclarations(irFunction, null, null) + irFunction.body = IrSyntheticBodyImpl(irClass.startOffset, irClass.endOffset, IrSyntheticBodyKind.ENUM_VALUEOF) } ) } diff --git a/compiler/testData/ir/irText/classes/classes.txt b/compiler/testData/ir/irText/classes/classes.txt index 4b885ddd45a..175a5946ae5 100644 --- a/compiler/testData/ir/irText/classes/classes.txt +++ b/compiler/testData/ir/irText/classes/classes.txt @@ -74,5 +74,6 @@ FILE /classes.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnumClass + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF diff --git a/compiler/testData/ir/irText/classes/enum.txt b/compiler/testData/ir/irText/classes/enum.txt index 0a234b7909d..6f2cd6b3e7e 100644 --- a/compiler/testData/ir/irText/classes/enum.txt +++ b/compiler/testData/ir/irText/classes/enum.txt @@ -34,6 +34,7 @@ FILE /enum.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnum1 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS TestEnum2 $this: VALUE_PARAMETER this@TestEnum2: TestEnum2 @@ -86,6 +87,7 @@ FILE /enum.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnum2 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS TestEnum3 $this: VALUE_PARAMETER this@TestEnum3: TestEnum3 @@ -155,6 +157,7 @@ FILE /enum.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnum3 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS TestEnum4 $this: VALUE_PARAMETER this@TestEnum4: TestEnum4 @@ -292,6 +295,7 @@ FILE /enum.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnum4 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS TestEnum5 $this: VALUE_PARAMETER this@TestEnum5: TestEnum5 @@ -344,5 +348,6 @@ FILE /enum.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): TestEnum5 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF diff --git a/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.txt b/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.txt index c5c0927198c..b37db531296 100644 --- a/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.txt +++ b/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.txt @@ -47,6 +47,7 @@ FILE /enumWithSecondaryCtor.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): Test0 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS Test1 $this: VALUE_PARAMETER this@Test1: Test1 @@ -99,6 +100,7 @@ FILE /enumWithSecondaryCtor.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): Test1 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS ENUM_CLASS Test2 $this: VALUE_PARAMETER this@Test2: Test2 @@ -225,5 +227,6 @@ FILE /enumWithSecondaryCtor.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): Test2 + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF diff --git a/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.txt b/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.txt index 5237de8b0b2..661775a2d4e 100644 --- a/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.txt +++ b/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.txt @@ -89,6 +89,7 @@ FILE /enumEntryAsReceiver.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): X + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF FUN public fun box(): kotlin.String BLOCK_BODY diff --git a/compiler/testData/ir/irText/expressions/objectAsCallable.txt b/compiler/testData/ir/irText/expressions/objectAsCallable.txt index 48592643845..a4c3876382d 100644 --- a/compiler/testData/ir/irText/expressions/objectAsCallable.txt +++ b/compiler/testData/ir/irText/expressions/objectAsCallable.txt @@ -45,6 +45,7 @@ FILE /objectAsCallable.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): En + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF FUN public operator fun A.invoke(i: kotlin.Int): kotlin.Int $receiver: VALUE_PARAMETER this@invoke: A @@ -78,4 +79,3 @@ FILE /objectAsCallable.kt BLOCK_BODY RETURN type=kotlin.Nothing from='(): Int' GET_FIELD 'test2: Int' type=kotlin.Int origin=null - diff --git a/compiler/testData/ir/irText/expressions/values.txt b/compiler/testData/ir/irText/expressions/values.txt index 646d82bcfe8..a90e772acfa 100644 --- a/compiler/testData/ir/irText/expressions/values.txt +++ b/compiler/testData/ir/irText/expressions/values.txt @@ -32,6 +32,7 @@ FILE /values.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): Enum + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF CLASS OBJECT A $this: VALUE_PARAMETER this@A: A diff --git a/compiler/testData/ir/irText/singletons/enumEntry.txt b/compiler/testData/ir/irText/singletons/enumEntry.txt index 163f9412fe0..f4c32704c7b 100644 --- a/compiler/testData/ir/irText/singletons/enumEntry.txt +++ b/compiler/testData/ir/irText/singletons/enumEntry.txt @@ -81,5 +81,6 @@ FILE /enumEntry.kt FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array SYNTHETIC_BODY kind=ENUM_VALUES FUN ENUM_CLASS_SPECIAL_MEMBER public final fun valueOf(value: kotlin.String): Z + VALUE_PARAMETER value-parameter value: kotlin.String SYNTHETIC_BODY kind=ENUM_VALUEOF