From d66c6c7e1e779a92ed04e1e8d2a138eac0c0d127 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 15 Jul 2020 01:12:23 -0700 Subject: [PATCH] FIR serializer: transform KSuspendFunction types too --- .../kotlin/fir/serialization/FirElementSerializer.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index a289128ced5..0d6ce29f401 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -607,9 +607,11 @@ class FirElementSerializer private constructor( private fun transformSuspendFunctionToRuntimeFunctionType(type: ConeClassLikeType): ConeClassLikeType { val suspendClassId = type.classId!! - val runtimeClassId = FunctionClassDescriptor.Kind.Function.let { - ClassId(it.packageFqName, Name.identifier(suspendClassId.relativeClassName.asString().drop("Suspend".length))) - } + val relativeClassName = suspendClassId.relativeClassName.asString() + val kind = + if (relativeClassName.startsWith("K")) FunctionClassDescriptor.Kind.KFunction + else FunctionClassDescriptor.Kind.Function + val runtimeClassId = ClassId(kind.packageFqName, Name.identifier(relativeClassName.replaceFirst("Suspend", ""))) val continuationClassId = CONTINUATION_INTERFACE_CLASS_ID return ConeClassLikeLookupTagImpl(runtimeClassId).constructClassType( (type.typeArguments.toList() + ConeClassLikeLookupTagImpl(continuationClassId).constructClassType( @@ -621,7 +623,7 @@ class FirElementSerializer private constructor( } private fun fillFromPossiblyInnerType(builder: ProtoBuf.Type.Builder, type: ConeClassLikeType) { - val classifierSymbol = type.lookupTag.toSymbol(session)!! + val classifierSymbol = type.lookupTag.toSymbol(session) ?: error("Can't lookup $type") val classifier = classifierSymbol.fir val classifierId = getClassifierId(classifier) builder.className = classifierId