From 530725c6bfbc6b392c6d53f34d82efe30383a03e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 25 Apr 2023 14:43:31 +0200 Subject: [PATCH] Kapt+JVM_IR: do not generate secondary constructor bodies In addition to ceedad40f3, do not generate bodies of constructors which delegate to super. #KT-58226 Fixed --- .../kotlin/psi2ir/generators/BodyGenerator.kt | 6 ++---- .../psi2ir/generators/FunctionGenerator.kt | 4 +++- .../converter/enumSecondaryConstructor.ir.txt | 19 +++++++++++++++++++ .../converter/enumSecondaryConstructor.kt | 9 +++++++++ .../converter/enumSecondaryConstructor.txt | 14 ++++++++++++++ ...ileToSourceStubConverterTestGenerated.java | 6 ++++++ ...ileToSourceStubConverterTestGenerated.java | 6 ++++++ 7 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.ir.txt create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.txt diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index ca4293efd4f..019e238f954 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -161,10 +161,8 @@ internal class BodyGenerator( generateDelegatingConstructorCall(irBlockBody, ktConstructor) - if (context.configuration.generateBodies) { - ktConstructor.bodyExpression?.let { ktBody -> - createStatementGenerator().generateStatements(ktBody.statements, irBlockBody) - } + ktConstructor.bodyExpression?.let { ktBody -> + createStatementGenerator().generateStatements(ktBody.statements, irBlockBody) } return irBlockBody diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 473812e35f6..c9473a76f24 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -295,7 +295,9 @@ internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : D } }.buildWithScope { irConstructor -> generateValueParameterDeclarations(irConstructor, ktParametersElement, null, ktContextReceiversElements) - irConstructor.body = createBodyGenerator(irConstructor.symbol).generateBody(irConstructor) + if (context.configuration.generateBodies) { + irConstructor.body = createBodyGenerator(irConstructor.symbol).generateBody(irConstructor) + } irConstructor.returnType = constructorDescriptor.returnType.toIrType() } } diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.ir.txt new file mode 100644 index 00000000000..11f65122a80 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.ir.txt @@ -0,0 +1,19 @@ +@kotlin.Metadata() +public enum Foo { + /*public static final*/ BLA /* = new Foo() */; + @org.jetbrains.annotations.NotNull() + private final java.lang.String bla = null; + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getBla() { + return null; + } + + Foo(java.lang.String bla) { + } + + @org.jetbrains.annotations.NotNull() + public static kotlin.enums.EnumEntries getEntries() { + return null; + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt new file mode 100644 index 00000000000..7eb47402e60 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt @@ -0,0 +1,9 @@ +enum class Foo { + BLA("bla"); + + val bla: String + + constructor(bla: String) { + this.bla = bla + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.txt b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.txt new file mode 100644 index 00000000000..2dc9881a662 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.txt @@ -0,0 +1,14 @@ +@kotlin.Metadata() +public enum Foo { + /*public static final*/ BLA /* = new Foo() */; + @org.jetbrains.annotations.NotNull() + private final java.lang.String bla = null; + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getBla() { + return null; + } + + Foo(java.lang.String bla) { + } +} 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 221cb953326..e8048962e2d 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 @@ -181,6 +181,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/enumInCompanion.kt"); } + @Test + @TestMetadata("enumSecondaryConstructor.kt") + public void testEnumSecondaryConstructor() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt"); + } + @Test @TestMetadata("enums.kt") public void testEnums() 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 e4d81707143..60937182910 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 @@ -181,6 +181,12 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla runTest("plugins/kapt3/kapt3-compiler/testData/converter/enumInCompanion.kt"); } + @Test + @TestMetadata("enumSecondaryConstructor.kt") + public void testEnumSecondaryConstructor() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/enumSecondaryConstructor.kt"); + } + @Test @TestMetadata("enums.kt") public void testEnums() throws Exception {