From b68962018c088e61598e7fac9f53201d1f463338 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 3 Jul 2023 16:43:24 +0200 Subject: [PATCH] [FIR] Remove incompatible from expect actual matching if compatible exists This fixes an issue with checking for default values in call resolution (see FirDefaultParametersResolver) where it is expected that the map only contains a single compatible entry. #KT-59613 Fixed --- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../mpp/FirExpectActualResolver.kt | 7 +++++++ .../codegen/box/multiplatform/kt59613.kt | 19 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../NativeCodegenBoxTestGenerated.java | 6 ++++++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../test/FirWasmCodegenBoxTestGenerated.java | 6 ++++++ .../test/K1WasmCodegenBoxTestGenerated.java | 6 ++++++ 17 files changed, 115 insertions(+) create mode 100644 compiler/testData/codegen/box/multiplatform/kt59613.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 8ba15de8717..29a4f49ce71 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -33193,6 +33193,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 2497df92e99..33eb7a05511 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -33193,6 +33193,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt index 1be63b78c03..4116dcc5d09 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualResolver.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.resolve.calls.mpp.AbstractExpectActualCompatibilityChecker import org.jetbrains.kotlin.mpp.CallableSymbolMarker +import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility object FirExpectActualResolver { fun findExpectForActual( @@ -77,6 +78,12 @@ object FirExpectActualResolver { actualContainingClass, context ) + }.let { + // If there is a compatible entry, return a map only containing it + when (val compatibleSymbols = it[ExpectActualCompatibility.Compatible]) { + null -> it + else -> mapOf>, _>(ExpectActualCompatibility.Compatible to compatibleSymbols) + } } } is FirClassLikeSymbol<*> -> { diff --git a/compiler/testData/codegen/box/multiplatform/kt59613.kt b/compiler/testData/codegen/box/multiplatform/kt59613.kt new file mode 100644 index 00000000000..2b9dc4ac3e3 --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/kt59613.kt @@ -0,0 +1,19 @@ +// LANGUAGE: +MultiPlatformProjects +// IGNORE_BACKEND_K1: ANY +// IGNORE_REASON: multimodule MPP tests are not supported in K1 +// ISSUE: KT-59613 + +// MODULE: common +// FILE: common.kt +expect fun printJson(pretty: Boolean = false) +expect fun printJson(replacer: () -> Any?) + +// MODULE: platform()()(common) +// FILE: platform.kt +actual fun printJson(replacer: () -> Any?) {} +actual fun printJson(pretty: Boolean) {} + +fun box(): String { + printJson() + return "OK" +} 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 ef640e58bfb..8bde1ac87d2 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 @@ -31609,6 +31609,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() 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 def6fa5c0c6..93b5cebf283 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 @@ -33193,6 +33193,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 154096354fe..4cb2745c5c8 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -33193,6 +33193,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() 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 3f4885fef62..783c4a1f867 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -28246,6 +28246,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @TestMetadata("noArgActualConstructor.kt") public void testNoArgActualConstructor() throws Exception { runTest("compiler/testData/codegen/box/multiplatform/noArgActualConstructor.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 26318b9fb31..0746d7af861 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -23041,6 +23041,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() 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 e2a20153ddc..c51c5d9c388 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 @@ -23041,6 +23041,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index c5dd27d4415..f94ed3f549c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -23041,6 +23041,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index e3c18894da2..9cf391b7d9d 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -25974,6 +25974,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index 0774bbcd4b7..905b6e6cafb 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -26566,6 +26566,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index e0c09f0e455..2571cd8a397 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -25679,6 +25679,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index 7cfea31dec8..81c4106ecb5 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -25975,6 +25975,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index 73fac38ace8..8bdc220d079 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -22885,6 +22885,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index 1406669d74f..123ea61feb8 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -22885,6 +22885,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest runTest("compiler/testData/codegen/box/multiplatform/expectProperty.kt"); } + @Test + @TestMetadata("kt59613.kt") + public void testKt59613() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/kt59613.kt"); + } + @Test @TestMetadata("optionalExpectation.kt") public void testOptionalExpectation() throws Exception {