2bafcddf7a
Namely, do not choose `Nothing?` result type when fixing a variable that has other constraints besides the ones that came from the relevant type parameter's upper bounds. See more details in KT-55691. In K1, the case from specialCallWithMaterializeAndExpectedType.kt was working (inferred to String?) just because the branches were analyzed independently with `String?` expected type. This change became necessary after the previous commit when we united inference subsystems for if/when branches (see motivation there). NB: For K1, the behavior is left the same, but the code was refactored a bit. ^KT-55691 Fixed ^KT-56448 Fixed
18 lines
630 B
Kotlin
Vendored
18 lines
630 B
Kotlin
Vendored
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEBUG_INFO_CONSTANT -UNUSED_EXPRESSION
|
|
|
|
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
|
fun <@kotlin.internal.OnlyInputTypes K, V, V1 : V?>
|
|
Map<out K, @kotlin.internal.Exact V>.getOrDefault_Exact(key: K, defaultValue: V1): V1 = TODO()
|
|
|
|
fun test() {
|
|
val map: Map<String, Int> = mapOf("x" to 1)
|
|
|
|
val r1 = map.getOrDefault_Exact("y", null)
|
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>r1<!>
|
|
|
|
val r2 = map.getOrDefault_Exact("y", null as Int?)
|
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>r2<!>
|
|
|
|
map.getOrDefault_Exact("y", <!ARGUMENT_TYPE_MISMATCH!>"string"<!>)
|
|
}
|