diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt index cc6e2f5e868..f38142902f8 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt @@ -14,14 +14,12 @@ import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder -import org.jetbrains.kotlin.backend.jvm.ir.getSingleAbstractMethod import org.jetbrains.kotlin.backend.jvm.ir.irArray import org.jetbrains.kotlin.backend.jvm.ir.javaClassReference import org.jetbrains.kotlin.codegen.ImplementationBodyCodegen import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.addField import org.jetbrains.kotlin.ir.builders.declarations.addFunction @@ -30,14 +28,11 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrSetValueImpl import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol -import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.defaultType -import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -52,7 +47,6 @@ internal val enumClassPhase = makeIrFilePhase( ) private const val VALUES_HELPER_FUNCTION_NAME = "\$values" -private const val ENTRIES_HELPER_FUNCTION_NAME = "\$entries" private const val ENTRIES_FIELD_NAME = "\$ENTRIES" private class EnumClassLowering(private val context: JvmBackendContext) : ClassLoweringPass { @@ -131,17 +125,8 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL error("The frontend must have checked if the feature is supported while emitting the IR") } else -> { - // Constructs the synthetic $entries() function that returns plain $VALUES without copy - val entriesHelperFunction = buildEntriesHelperFunction(valuesField) - - /* - * Add synthetic $ENTRIES field and binds its initializer to - * ``` - * val supplier: () -> E[] = indy LMF $entries - * $ENTRIES = EnumEntries(supplier) - * ``` - */ - buildEntriesField(entriesHelperFunction) + // Add synthetic $ENTRIES field and bind its initializer to `EnumEntries($VALUES)`. + buildEntriesField(valuesField) } } @@ -179,17 +164,6 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL } } - private fun buildEntriesHelperFunction(valuesField: IrField): IrFunction = irClass.addFunction { - name = Name.identifier(ENTRIES_HELPER_FUNCTION_NAME) - returnType = enumArrayType - visibility = DescriptorVisibilities.PRIVATE - origin = IrDeclarationOrigin.SYNTHETIC_HELPER_FOR_ENUM_VALUES - }.apply { - body = context.createJvmIrBuilder(symbol).run { - irExprBody(irGetField(null, valuesField)) - } - } - private fun buildValuesField(valuesHelperFunction: IrFunction): IrField = irClass.addField { name = Name.identifier(ImplementationBodyCodegen.ENUM_VALUES_FIELD_NAME) type = enumArrayType @@ -205,7 +179,7 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL } } - private fun buildEntriesField(entriesHelper: IrFunction): IrField = irClass.addField { + private fun buildEntriesField(valuesField: IrField): IrField = irClass.addField { name = Name.identifier(ENTRIES_FIELD_NAME) type = context.ir.symbols.enumEntries.defaultType visibility = DescriptorVisibilities.PRIVATE @@ -214,7 +188,11 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL isStatic = true }.apply { initializer = context.createJvmIrBuilder(symbol).run { - irCreateEnumEntriesIndy(entriesHelper, enumArrayType, this@EnumClassLowering.context) + irExprBody( + irCall(this@EnumClassLowering.context.ir.symbols.createEnumEntries).apply { + putValueArgument(0, irGetField(null, valuesField)) + } + ) } } @@ -343,37 +321,3 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL } } } - -internal fun IrBuilderWithScope.irCreateEnumEntriesIndy( - functionThatReturnsEnumArray: IrFunction, // values() or $entries() - enumArrayType: IrType, - jvmContext: JvmBackendContext -) = irExprBody(irBlock { - val symbols = jvmContext.ir.symbols - val samClass = context.irBuiltIns.functionN(0) - val type = samClass.typeWith(enumArrayType) - val sam = type.getClass()!!.getSingleAbstractMethod()!!.symbol - /* - * Indy to LMF call: - * INVOKEDYNAMIC get()Lkotlin/jvm/functions/Function0; [ - * // handle kind 0x6 : INVOKESTATIC - * java/lang/invoke/LambdaMetafactory.metafactory - * // arguments: - * ()Ljava/lang/Object;, - * // handle kind 0x6 : INVOKESTATIC - * $entries() [LEnum[, // or values() - * ()Ljava/util/List; - * ] - */ - val indyCall = irCall(symbols.indyLambdaMetafactoryIntrinsic, type).apply { - putTypeArgument(0, type) - putValueArgument(0, irRawFunctionReference(context.irBuiltIns.anyType, sam)) - putValueArgument(1, IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, functionThatReturnsEnumArray.symbol, 0, 0)) - putValueArgument(2, irRawFunctionReference(context.irBuiltIns.anyType, sam)) - putValueArgument(3, irVararg(context.irBuiltIns.anyType, emptyList())) - putValueArgument(4, irBoolean(false)) - } - +irCall(symbols.createEnumEntries).apply { - putValueArgument(0, indyCall) - } -}) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumExternalEntriesLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumExternalEntriesLowering.kt index e5a1e5552b6..6d0ed3fba6a 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumExternalEntriesLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/EnumExternalEntriesLowering.kt @@ -15,13 +15,16 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.declarations.addField import org.jetbrains.kotlin.ir.builders.declarations.buildClass +import org.jetbrains.kotlin.ir.builders.irCall +import org.jetbrains.kotlin.ir.builders.irExprBody import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl -import org.jetbrains.kotlin.ir.types.* +import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name @@ -123,9 +126,14 @@ class EnumExternalEntriesLowering(private val context: JvmBackendContext) : File for ((enum, field) in mappingState.mappings) { val enumValues = enum.findEnumValuesFunction(context) - val enumArrayType = field.type - val builder = context.createIrBuilder(field.symbol) - field.initializer = builder.irCreateEnumEntriesIndy(enumValues, enumArrayType, context) + field.initializer = + context.createIrBuilder(field.symbol).run { + irExprBody( + irCall(this@EnumExternalEntriesLowering.context.ir.symbols.createEnumEntries).apply { + putValueArgument(0, irCall(enumValues)) + } + ) + } } if (mappingState.mappings.isNotEmpty()) { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 92784817e8d..0606ee3e9d6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -230,8 +230,8 @@ class JvmSymbols( private val enumEntriesKt: IrClassSymbol = createClass(FqName("kotlin.enums.EnumEntriesKt")) { klass -> klass.addFunction("enumEntries", enumEntries.defaultType, isStatic = true).apply { - addValueParameter("entriesProvider", - irBuiltIns.functionN(0).typeWith(irBuiltIns.arrayClass.typeWith(klass.typeParameters.map { it.defaultType }))) + val e = addTypeParameter("E", irBuiltIns.enumClass.defaultType) + addValueParameter("entries", irBuiltIns.arrayClass.typeWith(e.defaultType)) } } diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.asm.ir.txt b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.asm.ir.txt index 5a1952b2bb7..11a12f95978 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.asm.ir.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.asm.ir.txt @@ -13,8 +13,6 @@ public class foo/Kotlin : java/lang/Enum { public final static foo.Kotlin A - private final static foo.Kotlin[] $entries() - private final static foo.Kotlin[] $values() static void () diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.ir.txt b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.ir.txt index 1f9c82e0fb3..4dd86460b04 100644 --- a/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.ir.txt +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.ir.txt @@ -11,7 +11,6 @@ public final enum class E { private synthetic final static field $ENTRIES: kotlin.enums.EnumEntries private synthetic final static field $VALUES: E[] public final enum static field X: E - private synthetic final static method $entries(): E[] private synthetic final static method $values(): E[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndLocalDelegatedProperty.ir.txt b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndLocalDelegatedProperty.ir.txt index e6ad914ede2..e7e9ba2b070 100644 --- a/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndLocalDelegatedProperty.ir.txt +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndLocalDelegatedProperty.ir.txt @@ -11,7 +11,6 @@ public final enum class E { private synthetic final static field $ENTRIES: kotlin.enums.EnumEntries private synthetic final static field $VALUES: E[] public final enum static field X: E - private synthetic final static method $entries(): E[] private synthetic final static method $values(): E[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnum.ir.txt b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnum.ir.txt index 2af80c021b2..a1e3e867f5f 100644 --- a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnum.ir.txt +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnum.ir.txt @@ -16,7 +16,6 @@ public final enum class E { private synthetic final static field $VALUES: E[] public final enum static field NOT_OK: E public final enum static field OK: E - private synthetic final static method $entries(): E[] private synthetic final static method $values(): E[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnumInAClass.ir.txt b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnumInAClass.ir.txt index 6742b95ef54..535995d3ed1 100644 --- a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnumInAClass.ir.txt +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/delegateToEnumInAClass.ir.txt @@ -25,7 +25,6 @@ public final enum class E { private synthetic final static field $VALUES: E[] public final enum static field NOT_OK: E public final enum static field OK: E - private synthetic final static method $entries(): E[] private synthetic final static method $values(): E[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/withSideEffectsToEnum.ir.txt b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/withSideEffectsToEnum.ir.txt index 50b98c12f97..eb7e70e95ff 100644 --- a/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/withSideEffectsToEnum.ir.txt +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToSingleton/withSideEffectsToEnum.ir.txt @@ -13,7 +13,6 @@ public final enum class E { private synthetic final static field $VALUES: E[] public final static @org.jetbrains.annotations.NotNull field Companion: E$Companion public final enum static field X: E - private synthetic final static method $entries(): E[] private synthetic final static method $values(): E[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValueOf.kt b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValueOf.kt index 077b1c01666..67d3eabd2be 100644 --- a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValueOf.kt +++ b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValueOf.kt @@ -4,7 +4,7 @@ // CHECK_BYTECODE_TEXT // JVM_IR_TEMPLATES -// 2 java/lang/invoke/LambdaMetafactory +// 1 java/lang/invoke/LambdaMetafactory // FILE: enumValues.kt enum class ABC(val x: String = "") { diff --git a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValues.kt b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValues.kt index b5073ca13be..de924530c2a 100644 --- a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValues.kt +++ b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/enumValues.kt @@ -4,7 +4,7 @@ // CHECK_BYTECODE_TEXT // JVM_IR_TEMPLATES -// 2 java/lang/invoke/LambdaMetafactory +// 1 java/lang/invoke/LambdaMetafactory // FILE: enumValues.kt enum class ABC(val x: String = "") { diff --git a/compiler/testData/codegen/bytecodeListing/deprecated/deprecatedEnumEntryFields.ir.txt b/compiler/testData/codegen/bytecodeListing/deprecated/deprecatedEnumEntryFields.ir.txt index bf2e628e73c..9ebfe7095bd 100644 --- a/compiler/testData/codegen/bytecodeListing/deprecated/deprecatedEnumEntryFields.ir.txt +++ b/compiler/testData/codegen/bytecodeListing/deprecated/deprecatedEnumEntryFields.ir.txt @@ -6,7 +6,6 @@ public final enum class Test { public deprecated final enum static @kotlin.Deprecated(message="") field ENTRY1: Test public final enum static field ENTRY2: Test public deprecated final enum static @kotlin.Deprecated(message="") field ENTRY3: Test - private synthetic final static method $entries(): Test[] private synthetic final static method $values(): Test[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/bytecodeListing/enum.ir.txt b/compiler/testData/codegen/bytecodeListing/enum.ir.txt index 463c257af56..a803a25ab10 100644 --- a/compiler/testData/codegen/bytecodeListing/enum.ir.txt +++ b/compiler/testData/codegen/bytecodeListing/enum.ir.txt @@ -12,7 +12,6 @@ public final enum class SimpleEnum { public final enum static field A: SimpleEnum public final enum static field B: SimpleEnum public final enum static field C: SimpleEnum - private synthetic final static method $entries(): SimpleEnum[] private synthetic final static method $values(): SimpleEnum[] static method (): void private method (p0: java.lang.String, p1: int): void @@ -28,7 +27,6 @@ public final enum class WithAnnotations { private synthetic final static field $VALUES: WithAnnotations[] public final enum static @Ann field A: WithAnnotations public final enum static @Ann field B: WithAnnotations - private synthetic final static method $entries(): WithAnnotations[] private synthetic final static method $values(): WithAnnotations[] static method (): void private method (p0: java.lang.String, p1: int): void @@ -46,7 +44,6 @@ public final enum class WithConstructor { public final enum static field B: WithConstructor public final enum static field C: WithConstructor private final @org.jetbrains.annotations.NotNull field x: java.lang.String - private synthetic final static method $entries(): WithConstructor[] private synthetic final static method $values(): WithConstructor[] static method (): void private method (p0: java.lang.String, p1: int, p2: java.lang.String): void @@ -71,7 +68,6 @@ public abstract enum class WithEntryClass { private synthetic final static field $VALUES: WithEntryClass[] public final enum static field A: WithEntryClass final inner class WithEntryClass$A - private synthetic final static method $entries(): WithEntryClass[] private synthetic final static method $values(): WithEntryClass[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/bytecodeListing/enumEntries.txt b/compiler/testData/codegen/bytecodeListing/enumEntries.txt index cebbd7560e0..c524a72ce65 100644 --- a/compiler/testData/codegen/bytecodeListing/enumEntries.txt +++ b/compiler/testData/codegen/bytecodeListing/enumEntries.txt @@ -12,7 +12,6 @@ public final enum class SimpleEnum { public final enum static field A: SimpleEnum public final enum static field B: SimpleEnum public final enum static field C: SimpleEnum - private synthetic final static method $entries(): SimpleEnum[] private synthetic final static method $values(): SimpleEnum[] static method (): void private method (p0: java.lang.String, p1: int): void @@ -28,7 +27,6 @@ public final enum class WithAnnotations { private synthetic final static field $VALUES: WithAnnotations[] public final enum static @Ann field A: WithAnnotations public final enum static @Ann field B: WithAnnotations - private synthetic final static method $entries(): WithAnnotations[] private synthetic final static method $values(): WithAnnotations[] static method (): void private method (p0: java.lang.String, p1: int): void @@ -46,7 +44,6 @@ public final enum class WithConstructor { public final enum static field B: WithConstructor public final enum static field C: WithConstructor private final @org.jetbrains.annotations.NotNull field x: java.lang.String - private synthetic final static method $entries(): WithConstructor[] private synthetic final static method $values(): WithConstructor[] static method (): void private method (p0: java.lang.String, p1: int, p2: java.lang.String): void @@ -71,7 +68,6 @@ public abstract enum class WithEntryClass { private synthetic final static field $VALUES: WithEntryClass[] public final enum static field A: WithEntryClass final inner class WithEntryClass$A - private synthetic final static method $entries(): WithEntryClass[] private synthetic final static method $values(): WithEntryClass[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassTypeParametersInConstructor.ir.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassTypeParametersInConstructor.ir.txt index f269102ded8..cbef9b02fe8 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassTypeParametersInConstructor.ir.txt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassTypeParametersInConstructor.ir.txt @@ -34,7 +34,6 @@ public final enum class TestEnum { private synthetic final static field $VALUES: TestEnum[] public final enum static field ANSWER: TestEnum private final field z: int - private synthetic final static method $entries(): TestEnum[] private synthetic final static method $values(): TestEnum[] static method (): void private method (p0: java.lang.String, p1: int, p2: int): void diff --git a/compiler/testData/codegen/bytecodeListing/kt55769.ir.txt b/compiler/testData/codegen/bytecodeListing/kt55769.ir.txt index 852d89e239d..ba05d33a358 100644 --- a/compiler/testData/codegen/bytecodeListing/kt55769.ir.txt +++ b/compiler/testData/codegen/bytecodeListing/kt55769.ir.txt @@ -13,7 +13,6 @@ public final enum class A$B$C { public static method valueOf(p0: java.lang.String): A$B$C public static @org.jetbrains.annotations.NotNull method getEntries(): kotlin.enums.EnumEntries private synthetic final static method $values(): A$B$C[] - private synthetic final static method $entries(): A$B$C[] static method (): void } diff --git a/compiler/testData/codegen/bytecodeText/enum/enumCheckcasts.kt b/compiler/testData/codegen/bytecodeText/enum/enumCheckcasts.kt index f0a119e862e..f9498b73238 100644 --- a/compiler/testData/codegen/bytecodeText/enum/enumCheckcasts.kt +++ b/compiler/testData/codegen/bytecodeText/enum/enumCheckcasts.kt @@ -3,5 +3,10 @@ enum class Foo { open fun result() = "Fail" } +// JVM_TEMPLATES // There are two CHECKCASTs, one in Foo.valueOf and one in Foo.values // 2 CHECKCAST + +// JVM_IR_TEMPLATES +// For JVM IR, there's an additional checkcast of `$ENTRIES` to `[Ljava/lang/Enum;` in the static initializer. +// 3 CHECKCAST diff --git a/compiler/testData/codegen/bytecodeText/enum/enumEntries.kt b/compiler/testData/codegen/bytecodeText/enum/enumEntries.kt index 8b7e1596e1a..b3f1e2ebf57 100644 --- a/compiler/testData/codegen/bytecodeText/enum/enumEntries.kt +++ b/compiler/testData/codegen/bytecodeText/enum/enumEntries.kt @@ -5,7 +5,7 @@ enum class MyEnum { E } -// 1 INVOKEDYNAMIC +// 0 INVOKEDYNAMIC // 1 kotlin.enums.EnumEntries getEntries\(\) // 1 private final static synthetic Lkotlin/enums/EnumEntries; \$ENTRIES // 1 public static getEntries\(\)Lkotlin/enums/EnumEntries; diff --git a/plugins/allopen/testData/bytecodeListing/allOpenOnNotClasses.ir.txt b/plugins/allopen/testData/bytecodeListing/allOpenOnNotClasses.ir.txt index 98926e8bd64..2cad6a8b741 100644 --- a/plugins/allopen/testData/bytecodeListing/allOpenOnNotClasses.ir.txt +++ b/plugins/allopen/testData/bytecodeListing/allOpenOnNotClasses.ir.txt @@ -11,7 +11,6 @@ public final enum class Enum { // source: 'allOpenOnNotClasses.kt' private synthetic final static field $ENTRIES: kotlin.enums.EnumEntries private synthetic final static field $VALUES: Enum[] - private synthetic final static method $entries(): Enum[] private synthetic final static method $values(): Enum[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/plugins/atomicfu/atomicfu-compiler/testData/box/TraceTest.txt b/plugins/atomicfu/atomicfu-compiler/testData/box/TraceTest.txt index 7e6baab3d22..c3c1ecf2050 100644 --- a/plugins/atomicfu/atomicfu-compiler/testData/box/TraceTest.txt +++ b/plugins/atomicfu/atomicfu-compiler/testData/box/TraceTest.txt @@ -5,7 +5,6 @@ final enum class TraceTest$Status { private synthetic final static field $VALUES: TraceTest$Status[] public final enum static field END: TraceTest$Status public final enum static field START: TraceTest$Status - private synthetic final static method $entries(): TraceTest$Status[] private synthetic final static method $values(): TraceTest$Status[] static method (): void private method (p0: java.lang.String, p1: int): void diff --git a/plugins/noarg/testData/bytecodeListing/annoOnNotClass.ir.txt b/plugins/noarg/testData/bytecodeListing/annoOnNotClass.ir.txt index d7bb8259c3e..8571b6db8e1 100644 --- a/plugins/noarg/testData/bytecodeListing/annoOnNotClass.ir.txt +++ b/plugins/noarg/testData/bytecodeListing/annoOnNotClass.ir.txt @@ -6,7 +6,6 @@ public final enum class Colors { private synthetic final static field $VALUES: Colors[] public final enum static field RED: Colors public final enum static field WHITE: Colors - private synthetic final static method $entries(): Colors[] private synthetic final static method $values(): Colors[] static method (): void private method (p0: java.lang.String, p1: int): void