[K2] Support legacy serialization for custom function type extensions.
For Compose libraries, it is important that libraries built with K2 in version 2.0 can be read and used by a version 1.9 K1 compiler. That is not possible if custom function types are in the metadata. ^KT-58456 Fixed
This commit is contained in:
+11
-1
@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.fir.serialization
|
||||
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionTypeKind
|
||||
import org.jetbrains.kotlin.builtins.functions.isBuiltin
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.constant.EnumValue
|
||||
import org.jetbrains.kotlin.constant.IntValue
|
||||
@@ -823,7 +825,8 @@ class FirElementSerializer private constructor(
|
||||
return lowerBound
|
||||
}
|
||||
is ConeClassLikeType -> {
|
||||
if (type.functionTypeKind(session) == FunctionTypeKind.SuspendFunction) {
|
||||
val functionTypeKind = type.functionTypeKind(session)
|
||||
if (functionTypeKind == FunctionTypeKind.SuspendFunction) {
|
||||
val runtimeFunctionType = type.suspendFunctionTypeToFunctionTypeWithContinuation(
|
||||
session, StandardClassIds.Continuation
|
||||
)
|
||||
@@ -831,6 +834,13 @@ class FirElementSerializer private constructor(
|
||||
functionType.flags = Flags.getTypeFlags(true, false)
|
||||
return functionType
|
||||
}
|
||||
if (functionTypeKind?.isBuiltin == false) {
|
||||
val legacySerializationUntil =
|
||||
LanguageVersion.fromVersionString(functionTypeKind.serializeAsFunctionWithAnnotationUntil)
|
||||
if (legacySerializationUntil != null && languageVersionSettings.languageVersion < legacySerializationUntil) {
|
||||
return typeProto(type.customFunctionTypeToSimpleFunctionType(session))
|
||||
}
|
||||
}
|
||||
fillFromPossiblyInnerType(builder, type)
|
||||
if (type.hasContextReceivers) {
|
||||
typeAnnotations.addIfNotNull(
|
||||
|
||||
Reference in New Issue
Block a user