From 562e8e357aa9dd294a388909f07aa6a0114805bb Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Tue, 4 Feb 2020 16:10:59 +0300 Subject: [PATCH] [IR] SAM lowering: supported suspend functions --- .../backend/common/lower/SingleAbstractMethodLowering.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt index 69ea56b95fb..d736ada3899 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SingleAbstractMethodLowering.kt @@ -144,7 +144,11 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) : val superMethod = superClass.functions.single { it.modality == Modality.ABSTRACT } // TODO: have psi2ir cast the argument to the correct function type. Also see the TODO // about type parameters in `visitTypeOperator`. - val wrappedFunctionClass = context.ir.symbols.functionN(superMethod.valueParameters.size).owner + val wrappedFunctionClass = + if (superMethod.isSuspend) + context.ir.symbols.suspendFunctionN(superMethod.valueParameters.size).owner + else + context.ir.symbols.functionN(superMethod.valueParameters.size).owner val wrappedFunctionType = wrappedFunctionClass.defaultType val wrapperVisibility = if (generatePublicWrapper) Visibilities.PUBLIC else privateGeneratedWrapperVisibility @@ -188,6 +192,7 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) : returnType = superMethod.returnType visibility = superMethod.visibility origin = subclass.origin + isSuspend = superMethod.isSuspend }.apply { overriddenSymbols += superMethod.symbol dispatchReceiverParameter = subclass.thisReceiver!!.copyTo(this)