From e5c87fdad7a69add0679c4018d8e8eca36e110e1 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 8 Jun 2017 18:42:00 +0300 Subject: [PATCH] [NI] Filter out duplicates types in commonSuperTypeForNotNullTypes --- .../calls/NewCommonSuperTypeCalculator.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt index 92c2647f8ee..c753446d3ac 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/NewCommonSuperTypeCalculator.kt @@ -64,12 +64,23 @@ object NewCommonSuperTypeCalculator { return if (anyMarkedNullable) commonSuperTypes.makeNullableAsSpecified(true) else commonSuperTypes } + private fun List.uniquify(): List { + val result = ArrayList() + for (type in this) { + if (!result.any { NewKotlinTypeChecker.equalTypes(it, type) }) { + result.add(type) + } + } + return result + } + private fun commonSuperTypeForNotNullTypes(types: List): SimpleType { - val filteredType = types.filterNot { targetType -> - types.any { other -> targetType != other && NewKotlinTypeChecker.isSubtypeOf(targetType, other)} + val uniqueTypes = types.uniquify() + val filteredType = uniqueTypes.filterNot { type -> + uniqueTypes.any { other -> type != other && NewKotlinTypeChecker.isSubtypeOf(type, other)} } // seems like all types are equal - if (filteredType.isEmpty()) return types.first() + if (filteredType.isEmpty()) return uniqueTypes.first() filteredType.singleOrNull()?.let { return it }