K2: serialize data class equals / hashCode / toString functions

#KT-57510 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-03-27 16:11:52 +02:00
committed by Space Team
parent 0a38b29491
commit 563781a246
2 changed files with 25 additions and 5 deletions
@@ -296,13 +296,22 @@ class FirElementSerializer private constructor(
processScope(memberScope) l@{
val declaration = it.fir as T
if (declaration.isSubstitutionOrIntersectionOverride) return@l
// non-intersection or substitution fake override
if (!(declaration.isStatic || declaration is FirConstructor)) {
if (declaration.dispatchReceiverClassLookupTagOrNull() != this@collectDeclarations.symbol.toLookupTag()) {
val dispatchReceiverLookupTag = declaration.dispatchReceiverClassLookupTagOrNull()
// Special case for data/value class equals/hashCode/toString, see KT-57510
val isOverrideOfAnyFunctionInDataOrValueClass = this@collectDeclarations is FirRegularClass &&
(this@collectDeclarations.isData || this@collectDeclarations.isInline) &&
dispatchReceiverLookupTag?.classId == StandardClassIds.Any && !declaration.isFinal
if (declaration.isSubstitutionOrIntersectionOverride) {
if (!isOverrideOfAnyFunctionInDataOrValueClass) {
return@l
}
} else if (!(declaration.isStatic || declaration is FirConstructor)) {
// non-intersection or substitution fake override
if (dispatchReceiverLookupTag != this@collectDeclarations.symbol.toLookupTag()) {
if (!isOverrideOfAnyFunctionInDataOrValueClass) {
return@l
}
}
}
add(declaration)