diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index c1c47d77e3e..5eabd459696 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -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) diff --git a/compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt b/compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt new file mode 100644 index 00000000000..4d6bd6b682c --- /dev/null +++ b/compiler/testData/codegen/box/bridges/typeParameterInExtensionReceiver.kt @@ -0,0 +1,14 @@ +interface A { + fun T2.foo(x: T1): String +} + +class Z : A { + override fun T2.foo(x: String) = this.toString() + x +} + +fun A.result() = "O".foo("K") + +fun box(): String { + val a: A = Z() + return a.result() +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index b0f66d3b28c..690ff4a59b5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -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) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 851419cda00..01ccd6b210d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -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) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 6943b942064..d5d98e6109a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -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) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index f28e96ce5cb..f1494c81522 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -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) 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 a661af5a5fe..373294422c4 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 @@ -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)