From 6b58be377efc8b1e41ea3e1e3822352ff4b253f9 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 2 Jun 2020 15:48:29 +0300 Subject: [PATCH] Fix chained conversions for subtypes of functional types --- .../resolve/calls/components/typeConversions.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/typeConversions.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/typeConversions.kt index 1236a68e5a0..0927cdba063 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/typeConversions.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/typeConversions.kt @@ -69,13 +69,20 @@ object TypeConversions { val samConvertedType = performConversionAfterSubtyping( candidate, argument, candidateParameter, candidateExpectedType, SamTypeConversions ) - if (samConvertedType != null) return samConvertedType - val suspendConvertedType = - performConversionAfterSubtyping(candidate, argument, candidateParameter, candidateExpectedType, SuspendTypeConversions) - if (suspendConvertedType != null) return suspendConvertedType + val suspendConvertedType = performConversionAfterSubtyping( + candidate, argument, candidateParameter, + candidateExpectedType = samConvertedType ?: candidateExpectedType, + SuspendTypeConversions + ) - return performConversionAfterSubtyping(candidate, argument, candidateParameter, candidateExpectedType, UnitTypeConversions) + val unitConvertedType = performConversionAfterSubtyping( + candidate, argument, candidateParameter, + candidateExpectedType = suspendConvertedType ?: samConvertedType ?: candidateExpectedType, + UnitTypeConversions + ) + + return unitConvertedType ?: suspendConvertedType ?: samConvertedType } private fun performConversionAfterSubtyping(