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 466b03f275e..c49446a228c 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 @@ -144,7 +144,7 @@ private class EnumClassLowering(private val context: JvmBackendContext) : ClassL private fun buildEnumEntryField(enumEntry: IrEnumEntry): IrField = context.cachedDeclarations.getFieldForEnumEntry(enumEntry).apply { - initializer = IrExpressionBodyImpl(enumEntry.initializerExpression!!.expression.patchDeclarationParents(this)) + initializer = enumEntry.initializerExpression?.let { IrExpressionBodyImpl(it.expression.patchDeclarationParents(this)) } annotations = annotations + enumEntry.annotations } 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 179bfc13783..f215a5272b6 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 @@ -531,7 +531,7 @@ internal class ClassGenerator( ).buildWithScope { irEnumEntry -> irEnumEntry.parent = irEnumClass - if (!enumEntryDescriptor.isExpect) { + if (!enumEntryDescriptor.isExpect && context.configuration.generateBodies) { irEnumEntry.initializerExpression = context.irFactory.createExpressionBody( createBodyGenerator(irEnumEntry.symbol) diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.ir.txt new file mode 100644 index 00000000000..ef860e4e2a8 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.ir.txt @@ -0,0 +1,29 @@ +@kotlin.Metadata() +public abstract interface Callback { + + @org.jetbrains.annotations.NotNull() + public abstract java.lang.String invoke(); +} + +//////////////////// + + +@kotlin.Metadata() +public enum Foo { + /*public static final*/ FOO /* = new Foo() */; + @org.jetbrains.annotations.NotNull() + private final Callback callback = null; + + Foo(Callback callback) { + } + + @org.jetbrains.annotations.NotNull() + public final Callback getCallback() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public static kotlin.enums.EnumEntries getEntries() { + return null; + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.kt b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.kt new file mode 100644 index 00000000000..8211e308d47 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.kt @@ -0,0 +1,11 @@ +interface Callback { + fun invoke(): String +} + +enum class Foo(val callback: Callback) { + FOO( + object : Callback { + override fun invoke(): String = "OK" + } + ) +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.txt b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.txt new file mode 100644 index 00000000000..b700d995842 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.txt @@ -0,0 +1,24 @@ +@kotlin.Metadata() +public abstract interface Callback { + + @org.jetbrains.annotations.NotNull() + public abstract java.lang.String invoke(); +} + +//////////////////// + + +@kotlin.Metadata() +public enum Foo { + /*public static final*/ FOO /* = new Foo() */; + @org.jetbrains.annotations.NotNull() + private final Callback callback = null; + + Foo(Callback callback) { + } + + @org.jetbrains.annotations.NotNull() + public final Callback getCallback() { + return null; + } +} diff --git a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java index a726219e170..8a83b04b400 100644 --- a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java @@ -91,6 +91,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/anonymousInitializer.kt"); } + @Test + @TestMetadata("anonymousObjectInEnumSuperConstructor.kt") + public void testAnonymousObjectInEnumSuperConstructor() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.kt"); + } + @Test @TestMetadata("comments.kt") public void testComments() throws Exception { diff --git a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java index 8e5ac939d83..2ea3229bd85 100644 --- a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java @@ -91,6 +91,12 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla runTest("plugins/kapt3/kapt3-compiler/testData/converter/anonymousInitializer.kt"); } + @Test + @TestMetadata("anonymousObjectInEnumSuperConstructor.kt") + public void testAnonymousObjectInEnumSuperConstructor() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/anonymousObjectInEnumSuperConstructor.kt"); + } + @Test @TestMetadata("comments.kt") public void testComments() throws Exception {