[FIR] Don't lose non-serializable properties during metadata deserialization
^KT-57941 Fixed
This commit is contained in:
committed by
Space Team
parent
37bbf447a3
commit
b253a3a47e
+7
-2
@@ -327,10 +327,15 @@ private fun ProtoBuf.ClassOrBuilder.propertiesInOrder(context: FirDeserializatio
|
||||
if (versionRequirements.any { it.version.major >= 2 }) return properties
|
||||
val order = getExtension(SerializationPluginMetadataExtensions.propertiesNamesInProgramOrder)
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.toSet()
|
||||
?: return properties
|
||||
val propertiesByName = properties.groupBy { it.name }
|
||||
return order.flatMap { propertiesByName[it] ?: emptyList() }.also {
|
||||
assert(it.size == properties.size)
|
||||
val orderedProperties = order.flatMap { propertiesByName[it] ?: emptyList() }
|
||||
// non-serializable properties are not saved in SerializationPluginMetadataExtensions, so we need to pick up them if any
|
||||
return if (orderedProperties.size == properties.size) {
|
||||
orderedProperties
|
||||
} else {
|
||||
orderedProperties + properties.filter { it.name !in order }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user