From b81ca31aae74c21c951b91a49371339e161f948a Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 24 Jul 2017 11:07:52 +0300 Subject: [PATCH] Record resolved delegation call for primary ctor if single result Do the same thing as for secondary constructor (looks like it was a workaround for R&I bug that was used only for secondary constructors for some reason). #KT-17464 Fixed Target versions 1.1.5 --- .../kotlin/resolve/BodyResolver.java | 2 +- .../super/superConstructor/kt17464_arrayOf.kt | 5 +++++ .../superConstructor/kt17464_linkedMapOf.kt | 9 ++++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 21 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 21 +++++++++++++++++++ .../LightAnalysisModeTestGenerated.java | 21 +++++++++++++++++++ .../semantics/JsCodegenBoxTestGenerated.java | 21 +++++++++++++++++++ 7 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt create mode 100644 compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index 3f369321219..9a89a6151dc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -328,7 +328,7 @@ public class BodyResolver { OverloadResolutionResults results = callResolver.resolveFunctionCall( trace, scopeForConstructor, CallMaker.makeConstructorCallWithoutTypeArguments(call), NO_EXPECTED_TYPE, outerDataFlowInfo, false); - if (results.isSuccess()) { + if (results.isSingleResult()) { KotlinType supertype = results.getResultingDescriptor().getReturnType(); recordSupertype(typeReference, supertype); ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype); diff --git a/compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt b/compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt new file mode 100644 index 00000000000..eb092f89776 --- /dev/null +++ b/compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt @@ -0,0 +1,5 @@ +open class A(val array: Array) + +class B : A(arrayOf("OK")) + +fun box() = B().array[0].toString() \ No newline at end of file diff --git a/compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt b/compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt new file mode 100644 index 00000000000..66a8d9a8893 --- /dev/null +++ b/compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +// FULL_JDK + +open class B(val map: LinkedHashMap) + +class C : B(linkedMapOf("O" to "K")) + +fun box() = + C().map.entries.first().let { it.key + it.value } \ No newline at end of file diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index e5f3b0eaf2b..90d097e1832 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -18247,6 +18247,27 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/unqualifiedSuperWithMethodsOfAny.kt"); doTest(fileName); } + + @TestMetadata("compiler/testData/codegen/box/super/superConstructor") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class SuperConstructor extends AbstractIrBlackBoxCodegenTest { + public void testAllFilesPresentInSuperConstructor() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/super/superConstructor"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + } + + @TestMetadata("kt17464_arrayOf.kt") + public void testKt17464_arrayOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt"); + doTest(fileName); + } + + @TestMetadata("kt17464_linkedMapOf.kt") + public void testKt17464_linkedMapOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt"); + doTest(fileName); + } + } } @TestMetadata("compiler/testData/codegen/box/synchronized") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 71fd3e1acb4..2380cc8566c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -18247,6 +18247,27 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/unqualifiedSuperWithMethodsOfAny.kt"); doTest(fileName); } + + @TestMetadata("compiler/testData/codegen/box/super/superConstructor") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class SuperConstructor extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInSuperConstructor() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/super/superConstructor"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + } + + @TestMetadata("kt17464_arrayOf.kt") + public void testKt17464_arrayOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt"); + doTest(fileName); + } + + @TestMetadata("kt17464_linkedMapOf.kt") + public void testKt17464_linkedMapOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt"); + doTest(fileName); + } + } } @TestMetadata("compiler/testData/codegen/box/synchronized") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index de9255e4cff..e1ed00b2a8f 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -18247,6 +18247,27 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/unqualifiedSuperWithMethodsOfAny.kt"); doTest(fileName); } + + @TestMetadata("compiler/testData/codegen/box/super/superConstructor") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class SuperConstructor extends AbstractLightAnalysisModeTest { + public void testAllFilesPresentInSuperConstructor() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/super/superConstructor"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + } + + @TestMetadata("kt17464_arrayOf.kt") + public void testKt17464_arrayOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt"); + doTest(fileName); + } + + @TestMetadata("kt17464_linkedMapOf.kt") + public void testKt17464_linkedMapOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt"); + doTest(fileName); + } + } } @TestMetadata("compiler/testData/codegen/box/synchronized") diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 1cf67be2d5b..11b530cae75 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -22243,6 +22243,27 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/unqualifiedSuperWithMethodsOfAny.kt"); doTest(fileName); } + + @TestMetadata("compiler/testData/codegen/box/super/superConstructor") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class SuperConstructor extends AbstractJsCodegenBoxTest { + public void testAllFilesPresentInSuperConstructor() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/super/superConstructor"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true); + } + + @TestMetadata("kt17464_arrayOf.kt") + public void testKt17464_arrayOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_arrayOf.kt"); + doTest(fileName); + } + + @TestMetadata("kt17464_linkedMapOf.kt") + public void testKt17464_linkedMapOf() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/superConstructor/kt17464_linkedMapOf.kt"); + doTest(fileName); + } + } } @TestMetadata("compiler/testData/codegen/box/synchronized")