From fb812301b27061c929b4ece66e88a99ec043974c Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Fri, 5 Jun 2020 14:06:13 +0300 Subject: [PATCH] Add test to preserve behaviour It's important to have ambiguity in these cases to introduce overload resolution by suspend-modifier without breaking changes in future Relates to #KT-23610 --- ...irOldFrontendDiagnosticsTestGenerated.java | 5 +++++ ...overloadResolutionBySuspendModifier.fir.kt | 19 +++++++++++++++++++ .../overloadResolutionBySuspendModifier.kt | 19 +++++++++++++++++++ .../overloadResolutionBySuspendModifier.txt | 8 ++++++++ .../checkers/DiagnosticsTestGenerated.java | 5 +++++ .../DiagnosticsUsingJavacTestGenerated.java | 5 +++++ 6 files changed, 61 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.fir.kt create mode 100644 compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt create mode 100644 compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.txt diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index 414c2e699ff..74d9fecee06 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -23222,6 +23222,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/suspendConversion/chainedFunSuspendConversionForSimpleExpression.kt"); } + @TestMetadata("overloadResolutionBySuspendModifier.kt") + public void testOverloadResolutionBySuspendModifier() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt"); + } + @TestMetadata("severalConversionsInOneCall.kt") public void testSeveralConversionsInOneCall() throws Exception { runTest("compiler/testData/diagnostics/tests/suspendConversion/severalConversionsInOneCall.kt"); diff --git a/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.fir.kt b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.fir.kt new file mode 100644 index 00000000000..8e1492e8364 --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.fir.kt @@ -0,0 +1,19 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun foo(x: () -> Int) {} +fun foo(x: suspend () -> Int) {} + +fun usualCall(): Int = 42 +suspend fun suspendCall(): Int = 42 + +// it's important to have ambiguity in these cases to introduce overload resolution by suspend modifier in future +fun test1() { + foo { usualCall() } + foo { suspendCall() } +} + +// candidate without suspend conversions is more specific +fun test2(f: () -> Int, g: suspend () -> Int) { + foo(f) + foo(g) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt new file mode 100644 index 00000000000..33c07109759 --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt @@ -0,0 +1,19 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun foo(x: () -> Int) {} +fun foo(x: suspend () -> Int) {} + +fun usualCall(): Int = 42 +suspend fun suspendCall(): Int = 42 + +// it's important to have ambiguity in these cases to introduce overload resolution by suspend modifier in future +fun test1() { + foo { usualCall() } + foo { suspendCall() } +} + +// candidate without suspend conversions is more specific +fun test2(f: () -> Int, g: suspend () -> Int) { + foo(f) + foo(g) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.txt b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.txt new file mode 100644 index 00000000000..6ffdb905ef2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.txt @@ -0,0 +1,8 @@ +package + +public fun foo(/*0*/ x: () -> kotlin.Int): kotlin.Unit +public fun foo(/*0*/ x: suspend () -> kotlin.Int): kotlin.Unit +public suspend fun suspendCall(): kotlin.Int +public fun test1(): kotlin.Unit +public fun test2(/*0*/ f: () -> kotlin.Int, /*1*/ g: suspend () -> kotlin.Int): kotlin.Unit +public fun usualCall(): kotlin.Int diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index f189d1f5d96..74c8d065d6d 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -23304,6 +23304,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/suspendConversion/chainedFunSuspendConversionForSimpleExpression.kt"); } + @TestMetadata("overloadResolutionBySuspendModifier.kt") + public void testOverloadResolutionBySuspendModifier() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt"); + } + @TestMetadata("severalConversionsInOneCall.kt") public void testSeveralConversionsInOneCall() throws Exception { runTest("compiler/testData/diagnostics/tests/suspendConversion/severalConversionsInOneCall.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 820e5496444..856faf739b0 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -23224,6 +23224,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/suspendConversion/chainedFunSuspendConversionForSimpleExpression.kt"); } + @TestMetadata("overloadResolutionBySuspendModifier.kt") + public void testOverloadResolutionBySuspendModifier() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/overloadResolutionBySuspendModifier.kt"); + } + @TestMetadata("severalConversionsInOneCall.kt") public void testSeveralConversionsInOneCall() throws Exception { runTest("compiler/testData/diagnostics/tests/suspendConversion/severalConversionsInOneCall.kt"); -- GitLab