From 0f242a9931b868f93b0d153e707eed38c10d016e Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Thu, 14 Nov 2019 16:17:29 +0300 Subject: [PATCH] FIC: Support conversions for `suspend` functions --- .../fir/FirDiagnosticsSmokeTestGenerated.java | 5 +++++ .../load/java/sam/SingleAbstractMethodUtils.java | 2 +- .../funInterface/suspendFunInterfaceConversion.kt | 14 ++++++++++++++ .../funInterface/suspendFunInterfaceConversion.txt | 12 ++++++++++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 5 +++++ .../javac/DiagnosticsUsingJavacTestGenerated.java | 5 +++++ 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt create mode 100644 compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.txt diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index 560c028cd3c..06d134a2a40 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -7833,6 +7833,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok public void testSeveralConversionsForFunInterface() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); } + + @TestMetadata("suspendFunInterfaceConversion.kt") + public void testSuspendFunInterfaceConversion() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression") diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java index 8a836d422cb..307ead36178 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java @@ -129,7 +129,7 @@ public class SingleAbstractMethodUtils { return FunctionTypesKt.createFunctionType( DescriptorUtilsKt.getBuiltIns(function), Annotations.Companion.getEMPTY(), - receiverType, parameterTypes, parameterNames, returnType + receiverType, parameterTypes, parameterNames, returnType, function.isSuspend() ); } diff --git a/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt b/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt new file mode 100644 index 00000000000..398c0368ff9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions +SamConversionPerArgument +FunctionInterfaceConversion +// !DIAGNOSTICS: -UNUSED_PARAMETER -NOTHING_TO_INLINE + +fun interface SuspendRunnable { + suspend fun invoke() +} + +fun run(r: SuspendRunnable) {} + +suspend fun bar() {} + +fun test() { + run(::bar) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.txt b/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.txt new file mode 100644 index 00000000000..e0b84d4ad8b --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.txt @@ -0,0 +1,12 @@ +package + +public suspend fun bar(): kotlin.Unit +public fun run(/*0*/ r: SuspendRunnable): kotlin.Unit +public fun test(): kotlin.Unit + +public interface SuspendRunnable { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract suspend fun invoke(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index ef38bf81553..4e7d1282236 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -7915,6 +7915,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { public void testSeveralConversionsForFunInterface() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); } + + @TestMetadata("suspendFunInterfaceConversion.kt") + public void testSuspendFunInterfaceConversion() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index a8429e37a55..32998ff0510 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -7910,6 +7910,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing public void testSeveralConversionsForFunInterface() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); } + + @TestMetadata("suspendFunInterfaceConversion.kt") + public void testSuspendFunInterfaceConversion() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/suspendFunInterfaceConversion.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression")