[FIR] Check compatibility of equality call between IT by component of each type
^KT-48113 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
5bdfa14a37
commit
67dd23354c
Vendored
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
// FULL_JDK
|
// FULL_JDK
|
||||||
|
// ISSUE: KT-48113
|
||||||
|
|
||||||
fun collapse(path: String) {
|
fun collapse(path: String) {
|
||||||
val result = (path as java.lang.String).replace("123", "456")
|
val result = (path as java.lang.String).replace("123", "456")
|
||||||
if (<!EQUALITY_NOT_APPLICABLE_WARNING!>result !== path<!>) {}
|
if (result !== path) {}
|
||||||
}
|
}
|
||||||
+5
-9
@@ -64,21 +64,17 @@ internal object ConeTypeCompatibilityChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ConeInferenceContext.isCompatible(a: ConeKotlinType, b: ConeKotlinType): Compatibility {
|
fun ConeInferenceContext.isCompatible(a: ConeKotlinType, b: ConeKotlinType): Compatibility {
|
||||||
val aUnwrap = unwrap(a)
|
if (a is ConeIntersectionType) {
|
||||||
val bUnwrap = unwrap(b)
|
return a.intersectedTypes.minOf { isCompatible(it, b) }
|
||||||
if (aUnwrap.containsAll(bUnwrap) || bUnwrap.containsAll(aUnwrap)) {
|
}
|
||||||
return Compatibility.COMPATIBLE
|
if (b is ConeIntersectionType) {
|
||||||
|
return b.intersectedTypes.minOf { isCompatible(a, it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val intersectionType = intersectTypesOrNull(listOf(a, b)) as? ConeIntersectionType ?: return Compatibility.COMPATIBLE
|
val intersectionType = intersectTypesOrNull(listOf(a, b)) as? ConeIntersectionType ?: return Compatibility.COMPATIBLE
|
||||||
return intersectionType.intersectedTypes.areCompatible(this)
|
return intersectionType.intersectedTypes.areCompatible(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun unwrap(type: ConeKotlinType): Collection<ConeKotlinType> = when (type) {
|
|
||||||
is ConeIntersectionType -> type.intersectedTypes
|
|
||||||
else -> listOf(type)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Collection<ConeKotlinType>.areCompatible(ctx: ConeInferenceContext): Compatibility {
|
private fun Collection<ConeKotlinType>.areCompatible(ctx: ConeInferenceContext): Compatibility {
|
||||||
// If all types are nullable, then `null` makes the given types compatible.
|
// If all types are nullable, then `null` makes the given types compatible.
|
||||||
if (all { with(ctx) { it.isNullableType() } }) return Compatibility.COMPATIBLE
|
if (all { with(ctx) { it.isNullableType() } }) return Compatibility.COMPATIBLE
|
||||||
|
|||||||
Reference in New Issue
Block a user