From 5dca4dbc67ac8439692a4225d38ec608908a7dff Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Thu, 21 Jul 2016 10:18:10 +0300 Subject: [PATCH] Fix for KT-11833: Error generating constructors of class null with kind IMPLEMENTATION on anonymous object inheriting from nested class of super class #KT-11833 Fixed --- .../codegen/ImplementationBodyCodegen.java | 3 +++ .../box/superConstructorCall/kt11833_1.kt | 17 +++++++++++++++++ .../box/superConstructorCall/kt11833_2.kt | 19 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 12 ++++++++++++ .../semantics/InnerNestedTestGenerated.java | 12 ++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 compiler/testData/codegen/box/superConstructorCall/kt11833_1.kt create mode 100644 compiler/testData/codegen/box/superConstructorCall/kt11833_2.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index c5ee53b1336..180c6914e57 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -1305,6 +1305,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { assert delegateExpression != null; delegateExpression.accept(visitor); } + else if (specifier instanceof KtSuperTypeCallEntry) { + specifier.accept(visitor); + } } ClassDescriptor superClass = DescriptorUtilsKt.getSuperClassNotAny(descriptor); diff --git a/compiler/testData/codegen/box/superConstructorCall/kt11833_1.kt b/compiler/testData/codegen/box/superConstructorCall/kt11833_1.kt new file mode 100644 index 00000000000..fe17fb4d085 --- /dev/null +++ b/compiler/testData/codegen/box/superConstructorCall/kt11833_1.kt @@ -0,0 +1,17 @@ +abstract class Father { + abstract inner class InClass { + abstract fun work(): String + } +} + +class Child : Father() { + val ChildInClass = object : Father.InClass() { + override fun work(): String { + return "OK" + } + } +} + +fun box(): String { + return Child().ChildInClass.work() +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/superConstructorCall/kt11833_2.kt b/compiler/testData/codegen/box/superConstructorCall/kt11833_2.kt new file mode 100644 index 00000000000..4753541d860 --- /dev/null +++ b/compiler/testData/codegen/box/superConstructorCall/kt11833_2.kt @@ -0,0 +1,19 @@ +abstract class Father { + abstract inner class InClass { + abstract fun work(): String + } +} + +class Child : Father() { + fun test(): InClass { + return object : Father.InClass() { + override fun work(): String { + return "OK" + } + } + } +} + +fun box(): String { + return Child().test().work() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 9555c5167b0..16ecf5bdbf3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -7321,6 +7321,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt11833_1.kt") + public void testKt11833_1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt11833_1.kt"); + doTest(fileName); + } + + @TestMetadata("kt11833_2.kt") + public void testKt11833_2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt11833_2.kt"); + doTest(fileName); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InnerNestedTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InnerNestedTestGenerated.java index dd9cc2c7670..7d937271f91 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InnerNestedTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InnerNestedTestGenerated.java @@ -107,6 +107,18 @@ public class InnerNestedTestGenerated extends AbstractInnerNestedTest { doTest(fileName); } + @TestMetadata("kt11833_1.kt") + public void testKt11833_1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt11833_1.kt"); + doTest(fileName); + } + + @TestMetadata("kt11833_2.kt") + public void testKt11833_2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt11833_2.kt"); + doTest(fileName); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/kt3132.kt");