[K2] [KN-55977] Fix suspend type serialization
Merge-request: KT-MR-8328 Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
b088e742ae
commit
e4d209cbde
@@ -69,7 +69,7 @@ fun FirAnonymousFunction.shouldReturnUnit(returnStatements: Collection<FirExpres
|
||||
isLambda && returnStatements.any { it is FirUnitExpression }
|
||||
|
||||
fun FirAnonymousFunction.isExplicitlySuspend(session: FirSession): Boolean =
|
||||
typeRef.coneTypeSafe<ConeKotlinType>()?.isSuspendFunctionType(session) == true
|
||||
typeRef.coneTypeSafe<ConeKotlinType>()?.isSuspendOrKSuspendFunctionType(session) == true
|
||||
|
||||
fun FirAnonymousFunction.addReturnToLastStatementIfNeeded() {
|
||||
// If this lambda's resolved, expected return type is Unit, we don't need an explicit return statement.
|
||||
|
||||
@@ -288,7 +288,7 @@ private fun argumentTypeWithSuspendConversion(
|
||||
// TODO: should refer to LanguageVersionSettings.SuspendConversion
|
||||
|
||||
// Expect the expected type to be a suspend functional type.
|
||||
if (!expectedType.isSuspendFunctionType(session)) {
|
||||
if (!expectedType.isSuspendOrKSuspendFunctionType(session)) {
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -253,7 +253,7 @@ private fun BodyResolveComponents.getCallableReferenceAdaptation(
|
||||
else
|
||||
mappedArguments
|
||||
|
||||
val suspendConversionStrategy = if ((function as? FirSimpleFunction)?.isSuspend != true && expectedType.isSuspendFunctionType(session))
|
||||
val suspendConversionStrategy = if ((function as? FirSimpleFunction)?.isSuspend != true && expectedType.isSuspendOrKSuspendFunctionType(session))
|
||||
SuspendConversionStrategy.SUSPEND_CONVERSION
|
||||
else
|
||||
SuspendConversionStrategy.NO_CONVERSION
|
||||
|
||||
+1
-1
@@ -100,7 +100,7 @@ fun extractLambdaInfoFromFunctionalType(
|
||||
return ResolvedLambdaAtom(
|
||||
argument,
|
||||
expectedType,
|
||||
expectedType.isSuspendFunctionType(session),
|
||||
expectedType.isSuspendOrKSuspendFunctionType(session),
|
||||
receiverType,
|
||||
contextReceivers,
|
||||
parameters,
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ private fun extractLambdaInfo(
|
||||
session: FirSession,
|
||||
candidate: Candidate?
|
||||
): ResolvedLambdaAtom {
|
||||
val isSuspend = expectedType?.isSuspendFunctionType(session) ?: false
|
||||
val isSuspend = expectedType?.isSuspendOrKSuspendFunctionType(session) ?: false
|
||||
|
||||
val isFunctionSupertype =
|
||||
expectedType != null && expectedType.lowerBoundIfFlexible()
|
||||
|
||||
+1
-1
@@ -640,7 +640,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
}
|
||||
|
||||
if (needUpdateLambdaType) {
|
||||
val isSuspend = expectedType?.isSuspendFunctionType(session) ?: result.isExplicitlySuspend(session)
|
||||
val isSuspend = expectedType?.isSuspendOrKSuspendFunctionType(session) ?: result.isExplicitlySuspend(session)
|
||||
result.replaceTypeRef(result.constructFunctionalTypeRef(isSuspend))
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(result.typeRef, result.source, context.file.source)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user