[NI] Filter out duplicates types in commonSuperTypeForNotNullTypes
This commit is contained in:
committed by
Mikhail Zarechenskiy
parent
b336919db3
commit
e5c87fdad7
+14
-3
@@ -64,12 +64,23 @@ object NewCommonSuperTypeCalculator {
|
|||||||
return if (anyMarkedNullable) commonSuperTypes.makeNullableAsSpecified(true) else commonSuperTypes
|
return if (anyMarkedNullable) commonSuperTypes.makeNullableAsSpecified(true) else commonSuperTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun List<SimpleType>.uniquify(): List<SimpleType> {
|
||||||
|
val result = ArrayList<SimpleType>()
|
||||||
|
for (type in this) {
|
||||||
|
if (!result.any { NewKotlinTypeChecker.equalTypes(it, type) }) {
|
||||||
|
result.add(type)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
private fun commonSuperTypeForNotNullTypes(types: List<SimpleType>): SimpleType {
|
private fun commonSuperTypeForNotNullTypes(types: List<SimpleType>): SimpleType {
|
||||||
val filteredType = types.filterNot { targetType ->
|
val uniqueTypes = types.uniquify()
|
||||||
types.any { other -> targetType != other && NewKotlinTypeChecker.isSubtypeOf(targetType, other)}
|
val filteredType = uniqueTypes.filterNot { type ->
|
||||||
|
uniqueTypes.any { other -> type != other && NewKotlinTypeChecker.isSubtypeOf(type, other)}
|
||||||
}
|
}
|
||||||
// seems like all types are equal
|
// seems like all types are equal
|
||||||
if (filteredType.isEmpty()) return types.first()
|
if (filteredType.isEmpty()) return uniqueTypes.first()
|
||||||
|
|
||||||
filteredType.singleOrNull()?.let { return it }
|
filteredType.singleOrNull()?.let { return it }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user