Generate parameter declarations for synthetic members of enum classes
This commit is contained in:
@@ -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? {
|
||||
|
||||
+7
-5
@@ -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)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -74,5 +74,6 @@ FILE /classes.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<TestEnumClass>
|
||||
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
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ FILE /enum.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<TestEnum1>
|
||||
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<TestEnum2>
|
||||
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<TestEnum3>
|
||||
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<TestEnum4>
|
||||
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<TestEnum5>
|
||||
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
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ FILE /enumWithSecondaryCtor.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<Test0>
|
||||
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<Test1>
|
||||
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<Test2>
|
||||
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
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@ FILE /enumEntryAsReceiver.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<X>
|
||||
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
|
||||
|
||||
@@ -45,6 +45,7 @@ FILE /objectAsCallable.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<En>
|
||||
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='<get-test2>(): Int'
|
||||
GET_FIELD 'test2: Int' type=kotlin.Int origin=null
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ FILE /values.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<Enum>
|
||||
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
|
||||
|
||||
@@ -81,5 +81,6 @@ FILE /enumEntry.kt
|
||||
FUN ENUM_CLASS_SPECIAL_MEMBER public final fun values(): kotlin.Array<Z>
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user