diff --git a/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt b/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt index 55c411cedf7..63fea3cfdca 100644 --- a/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt +++ b/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt @@ -46,7 +46,7 @@ object AbstractStrictEqualityTypeChecker { return false } -// if (a.arguments === b.arguments) return true + if (identicalArguments(a, b)) return true for (i in 0 until a.argumentsCount()) { val aArg = a.getArgument(i) diff --git a/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt b/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt index 91ede9fd571..c5b762226e0 100644 --- a/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt +++ b/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt @@ -25,7 +25,15 @@ enum class TypeVariance { INV } -interface TypeSystemContext { + +interface TypeSystemOptimizationContext { + /** + * @return true is a.arguments == b.arguments, or false if not supported + */ + fun identicalArguments(a: SimpleTypeIM, b: SimpleTypeIM) = false +} + +interface TypeSystemContext : TypeSystemOptimizationContext { fun KotlinTypeIM.asSimpleType(): SimpleTypeIM? fun KotlinTypeIM.asFlexibleType(): FlexibleTypeIM?