Implement equals/hashcode for IrDeclarationOrigin so deserialized unknown origins would be compared correctly

This commit is contained in:
Leonid Startsev
2019-04-23 17:56:02 +03:00
parent 02331fbd7e
commit 406896eaf0
2 changed files with 19 additions and 1 deletions
@@ -55,4 +55,18 @@ abstract class IrDeclarationOriginImpl(
override val isSynthetic: Boolean = false
) : IrDeclarationOrigin {
override fun toString(): String = name
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is IrDeclarationOriginImpl) return false
if (name != other.name) return false
return true
}
override fun hashCode(): Int {
return name.hashCode()
}
}
@@ -1153,7 +1153,11 @@ abstract class IrModuleDeserializer(
private val allKnownOrigins =
IrDeclarationOrigin::class.nestedClasses.toList() + DeclarationFactory.FIELD_FOR_OUTER_THIS::class
val originIndex = allKnownOrigins.map { it.objectInstance as IrDeclarationOriginImpl }.associateBy { it.name }
fun deserializeIrDeclarationOrigin(proto: KotlinIr.IrDeclarationOrigin) = originIndex[deserializeString(proto.custom)]!!
fun deserializeIrDeclarationOrigin(proto: KotlinIr.IrDeclarationOrigin): IrDeclarationOriginImpl {
val originName = deserializeString(proto.custom)
return originIndex[originName] ?: object : IrDeclarationOriginImpl(originName) {}
}
open fun deserializeDeclaration(proto: KotlinIr.IrDeclaration, parent: IrDeclarationParent?): IrDeclaration {