diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 6c5de54ce5d..7cee4ccd279 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -454,8 +454,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { try { lookupConstructorExpressionsInClosureIfPresent(); constructorCodegen.generatePrimaryConstructor(delegationFieldsInfo, superClassAsmType); - for (ClassConstructorDescriptor secondaryConstructor : DescriptorUtilsKt.getSecondaryConstructors(descriptor)) { - constructorCodegen.generateSecondaryConstructor(secondaryConstructor, superClassAsmType); + if (!descriptor.isInline()) { + for (ClassConstructorDescriptor secondaryConstructor : DescriptorUtilsKt.getSecondaryConstructors(descriptor)) { + constructorCodegen.generateSecondaryConstructor(secondaryConstructor, superClassAsmType); + } } } catch (CompilationException | ProcessCanceledException e) { diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.kt new file mode 100644 index 00000000000..52a7467675b --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.kt @@ -0,0 +1,5 @@ +// !LANGUAGE: +InlineClasses + +inline class Foo(val x: Int) { + constructor(x: Long) : this(x.toInt()) +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt new file mode 100644 index 00000000000..2201e53bd89 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.txt @@ -0,0 +1,21 @@ +@kotlin.Metadata +static class Foo$Erased { + method (): void + public final static @org.jetbrains.annotations.NotNull method box(p0: int): Foo + public static method constructor(p0: int): int + public static method constructor(p0: long): int + public static method equals(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean + public static method hashCode(p0: int): int + public static @org.jetbrains.annotations.NotNull method toString(p0: int): java.lang.String +} + +@kotlin.Metadata +public final class Foo { + private final field x: int + public method (p0: int): void + public method equals(p0: java.lang.Object): boolean + public final method getX(): int + public method hashCode(): int + public method toString(): java.lang.String + public final method unbox(): int +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index d63d5c693e4..15206b21d52 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -284,6 +284,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/computablePropertiesInsideInlineClass.kt"); } + @TestMetadata("inlineClassConstructors.kt") + public void testInlineClassConstructors() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassConstructors.kt"); + } + @TestMetadata("noBridgesForErasedInlineClass.kt") public void testNoBridgesForErasedInlineClass() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.kt");