FIR: introduce & use various comparators to sort members while de/serialization

#KT-41018 fixed
This commit is contained in:
Jinseong Jeon
2020-08-13 23:17:30 -07:00
committed by Mikhail Zarechenskiy
parent 91c021c699
commit e8157a5488
81 changed files with 1106 additions and 554 deletions
@@ -172,6 +172,17 @@ fun deserializeClassToSymbol(
addCloneForArrayIfNeeded(classId)
addSerializableIfNeeded(classId)
declarations.sortWith(object : Comparator<FirDeclaration> {
override fun compare(a: FirDeclaration, b: FirDeclaration): Int {
// Reorder members based on their type and name only.
// See FE 1.0's [DeserializedMemberScope#addMembers].
if (a is FirMemberDeclaration && b is FirMemberDeclaration) {
return FirMemberDeclarationComparator.TypeAndNameComparator.compare(a, b)
}
return 0
}
})
}.also {
if (isSealed) {
it.sealedInheritors = classProto.sealedSubclassFqNameList.map { nameIndex ->