[JS IR BE] BridgeConstruction: Fix init order of receivers and type parameters

This commit is contained in:
Svyatoslav Kuzmich
2019-05-09 17:25:12 +03:00
parent 14259ca9e0
commit 0f90aa5f80
7 changed files with 40 additions and 2 deletions
@@ -134,13 +134,12 @@ class BridgesConstruction(val context: JsIrBackendContext) : ClassLoweringPass {
bridge.isSuspend,
origin
).apply {
copyTypeParametersFrom(bridge)
// TODO: should dispatch receiver be copied?
dispatchReceiverParameter = bridge.dispatchReceiverParameter?.run {
IrValueParameterImpl(startOffset, endOffset, origin, descriptor, type, varargElementType).also { it.parent = this@apply }
}
extensionReceiverParameter = bridge.extensionReceiverParameter?.copyTo(this)
copyTypeParametersFrom(bridge)
valueParameters += bridge.valueParameters.map { p -> p.copyTo(this) }
annotations += bridge.annotations
overriddenSymbols.addAll(delegateTo.overriddenSymbols)
@@ -0,0 +1,14 @@
interface A<T1> {
fun <T2> T2.foo(x: T1): String
}
class Z : A<String> {
override fun <T2> T2.foo(x: String) = this.toString() + x
}
fun A<String>.result() = "O".foo("K")
fun box(): String {
val a: A<String> = Z()
return a.result()
}
@@ -1474,6 +1474,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/bridges/twoParentsWithTheSameMethodOneBridge.kt");
}
@TestMetadata("typeParameterInExtensionReceiver.kt")
public void testTypeParameterInExtensionReceiver() throws Exception {
runTest("compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt");
}
@TestMetadata("compiler/testData/codegen/box/bridges/substitutionInSuperClass")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -1474,6 +1474,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/bridges/twoParentsWithTheSameMethodOneBridge.kt");
}
@TestMetadata("typeParameterInExtensionReceiver.kt")
public void testTypeParameterInExtensionReceiver() throws Exception {
runTest("compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt");
}
@TestMetadata("compiler/testData/codegen/box/bridges/substitutionInSuperClass")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -1474,6 +1474,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/bridges/twoParentsWithTheSameMethodOneBridge.kt");
}
@TestMetadata("typeParameterInExtensionReceiver.kt")
public void testTypeParameterInExtensionReceiver() throws Exception {
runTest("compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt");
}
@TestMetadata("compiler/testData/codegen/box/bridges/substitutionInSuperClass")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -1179,6 +1179,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/bridges/twoParentsWithTheSameMethodOneBridge.kt");
}
@TestMetadata("typeParameterInExtensionReceiver.kt")
public void testTypeParameterInExtensionReceiver() throws Exception {
runTest("compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt");
}
@TestMetadata("compiler/testData/codegen/box/bridges/substitutionInSuperClass")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -1179,6 +1179,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/bridges/twoParentsWithTheSameMethodOneBridge.kt");
}
@TestMetadata("typeParameterInExtensionReceiver.kt")
public void testTypeParameterInExtensionReceiver() throws Exception {
runTest("compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt");
}
@TestMetadata("compiler/testData/codegen/box/bridges/substitutionInSuperClass")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)