Fix type table serialization in DescriptorSerializer
Always serialize type table (and version requirement table) after everything else, to prevent bugs like KT-51446 where inline class underlying type was added to the type table after it has already been serialized. #KT-51446 Fixed
This commit is contained in:
+11
-27
@@ -78,18 +78,11 @@ class FirElementSerializer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
val typeTableProto = typeTable.serialize()
|
||||
if (typeTableProto != null) {
|
||||
builder.typeTable = typeTableProto
|
||||
}
|
||||
|
||||
val versionRequirementTableProto = versionRequirementTable?.serialize()
|
||||
if (versionRequirementTableProto != null) {
|
||||
builder.versionRequirementTable = versionRequirementTableProto
|
||||
}
|
||||
|
||||
extension.serializePackage(packageFqName, builder)
|
||||
|
||||
typeTable.serialize()?.let { builder.typeTable = it }
|
||||
versionRequirementTable?.serialize()?.let { builder.versionRequirementTable = it }
|
||||
|
||||
return builder
|
||||
}
|
||||
|
||||
@@ -179,11 +172,6 @@ class FirElementSerializer private constructor(
|
||||
builder.companionObjectName = getSimpleNameIndex(companionObject.name)
|
||||
}
|
||||
|
||||
val typeTableProto = typeTable.serialize()
|
||||
if (typeTableProto != null) {
|
||||
builder.typeTable = typeTableProto
|
||||
}
|
||||
|
||||
val representation = (klass as? FirRegularClass)?.getInlineClassUnderlyingParameter(session)
|
||||
if (representation != null) {
|
||||
builder.inlineClassUnderlyingPropertyName = getSimpleNameIndex(representation.name)
|
||||
@@ -208,10 +196,9 @@ class FirElementSerializer private constructor(
|
||||
|
||||
writeVersionRequirementForInlineClasses(klass, builder, versionRequirementTable)
|
||||
|
||||
val versionRequirementTableProto = versionRequirementTable.serialize()
|
||||
if (versionRequirementTableProto != null) {
|
||||
builder.versionRequirementTable = versionRequirementTableProto
|
||||
}
|
||||
typeTable.serialize()?.let { builder.typeTable = it }
|
||||
versionRequirementTable.serialize()?.let { builder.versionRequirementTable = it }
|
||||
|
||||
return builder
|
||||
}
|
||||
|
||||
@@ -411,11 +398,12 @@ class FirElementSerializer private constructor(
|
||||
builder.addValueParameter(local.valueParameterProto(valueParameter))
|
||||
}
|
||||
|
||||
contractSerializer.serializeContractOfFunctionIfAny(function, builder, this)
|
||||
|
||||
extension.serializeFunction(function, builder, versionRequirementTable, local)
|
||||
|
||||
if (serializeTypeTableToFunction) {
|
||||
val typeTableProto = typeTable.serialize()
|
||||
if (typeTableProto != null) {
|
||||
builder.typeTable = typeTableProto
|
||||
}
|
||||
typeTable.serialize()?.let { builder.typeTable = it }
|
||||
}
|
||||
|
||||
versionRequirementTable?.run {
|
||||
@@ -430,10 +418,6 @@ class FirElementSerializer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
contractSerializer.serializeContractOfFunctionIfAny(function, builder, this)
|
||||
|
||||
extension.serializeFunction(function, builder, versionRequirementTable, local)
|
||||
|
||||
return builder
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user