From e50e055eb423f2d7092b711bbd60f0368fdfa49e Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 10 Dec 2021 11:10:22 +0300 Subject: [PATCH] [FE 1.0] Don't try to compute value parameters for variables while creating a flat signature for the overload resolution ^KT-50172 Fixed --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../resolve/calls/results/FlatSignatureUtils.kt | 11 ++++++++--- .../testData/codegen/box/callableReference/kt50172.kt | 11 +++++++++++ .../runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../wasm/semantics/IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../blackboxtest/NativeExtBlackBoxTestGenerated.java | 6 ++++++ 10 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/codegen/box/callableReference/kt50172.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index ebbd022f9eb..f4d95f29703 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -2933,6 +2933,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/FlatSignatureUtils.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/FlatSignatureUtils.kt index 7301f3d374a..88549207981 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/FlatSignatureUtils.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/FlatSignatureUtils.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.builtins.getValueParameterTypesFromCallableReflectio import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.descriptors.synthetic.SyntheticMemberDescriptor import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue import org.jetbrains.kotlin.types.KotlinType @@ -28,9 +29,13 @@ fun FlatSignature.Companion.createFromReflectionType( // have transient receiver which is not the same in its signature val receiver = descriptor.extensionReceiverParameter?.type val contextReceiversTypes = descriptor.contextReceiverParameters.mapNotNull { it.type } - val parameters = reflectionType.getValueParameterTypesFromCallableReflectionType( - receiver != null && !hasBoundExtensionReceiver - ).map { it.type } + val parameters = if (descriptor is VariableDescriptor) { + emptyList() + } else { + reflectionType.getValueParameterTypesFromCallableReflectionType( + receiver != null && !hasBoundExtensionReceiver + ).map { it.type } + } return FlatSignature( origin, diff --git a/compiler/testData/codegen/box/callableReference/kt50172.kt b/compiler/testData/codegen/box/callableReference/kt50172.kt new file mode 100644 index 00000000000..cfa8b17d067 --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/kt50172.kt @@ -0,0 +1,11 @@ +// WITH_STDLIB + +fun g(s: String): List { + fun f(x: String): String = x + "K" + + val f = f(s) + return listOf(s).map(::f) +} + +fun box(): String = + g("O").first() diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index d676861b479..717a2f80b0b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -2855,6 +2855,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 56891922a0f..83a3678310c 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -2933,6 +2933,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index da7bcdf828a..064392438b8 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -2505,6 +2505,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index 8c16281e7b4..3349158de40 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -1895,6 +1895,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index f1f22ec73c8..d35a1ddef49 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -1937,6 +1937,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 60fdfbc3e46..bdf9dabbeca 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -1730,6 +1730,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.kt"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java index 9aaaa5a0c45..fb23125eae6 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java @@ -1961,6 +1961,12 @@ public class NativeExtBlackBoxTestGenerated extends AbstractNativeBlackBoxTest { runTest("compiler/testData/codegen/box/callableReference/kt47988.kt"); } + @Test + @TestMetadata("kt50172.kt") + public void testKt50172() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt50172.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() throws Exception {