From e26abbbbb0d9042bf1dbb2c839c8bd254ce23b26 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Mon, 15 Nov 2021 16:10:05 +0300 Subject: [PATCH] FIR: Implement ConeTypeVariableType::equals/hashCode manually `typeAttributes` are not considered as a part of equality for other type kinds --- .../jetbrains/kotlin/fir/types/ConeTypes.kt | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt index b654dee8f62..cef192330e4 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt @@ -91,6 +91,7 @@ sealed class ConeKotlinType : ConeKotlinTypeProjection(), KotlinTypeMarker, Type final override fun toString(): String { return render() } + abstract override fun equals(other: Any?): Boolean abstract override fun hashCode(): Int } @@ -224,12 +225,30 @@ data class ConeCapturedType( } } -data class ConeTypeVariableType( +class ConeTypeVariableType( override val nullability: ConeNullability, override val lookupTag: ConeTypeVariableTypeConstructor, override val attributes: ConeAttributes = ConeAttributes.Empty, ) : ConeLookupTagBasedType() { override val typeArguments: Array get() = emptyArray() + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ConeTypeVariableType) return false + + if (nullability != other.nullability) return false + if (lookupTag != other.lookupTag) return false + + return true + } + + override fun hashCode(): Int { + var result = 0 + result = 31 * result + nullability.hashCode() + result = 31 * result + lookupTag.hashCode() + return result + } + + } data class ConeDefinitelyNotNullType(val original: ConeKotlinType) : ConeSimpleKotlinType(), DefinitelyNotNullTypeMarker {