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 }