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
This commit is contained in:
Dmitry Petrov
2017-07-24 11:07:52 +03:00
parent c9ad290ad5
commit b81ca31aae
7 changed files with 99 additions and 1 deletions
@@ -328,7 +328,7 @@ public class BodyResolver {
OverloadResolutionResults<FunctionDescriptor> 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);
@@ -0,0 +1,5 @@
open class A(val array: Array<Any>)
class B : A(arrayOf("OK"))
fun box() = B().array[0].toString()
@@ -0,0 +1,9 @@
// WITH_RUNTIME
// FULL_JDK
open class B(val map: LinkedHashMap<String, String>)
class C : B(linkedMapOf("O" to "K"))
fun box() =
C().map.entries.first().let { it.key + it.value }
@@ -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")
@@ -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")
@@ -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")
@@ -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")