K2: Emulate K1 behavior in case of when-elvis combination

^KT-55692 Related
This commit is contained in:
Denis.Zharkov
2022-12-07 09:57:42 +01:00
committed by Space Team
parent e46ef0bbec
commit 181f23bd8d
6 changed files with 50 additions and 0 deletions
@@ -0,0 +1,19 @@
// FIR_IDENTICAL
// SKIP_TXT
fun <X> select(vararg x: X): X = x[0]
fun <E> myOut(): Out<E> = TODO()
interface Out<out T>
fun foo(x: Int, o: Out<String>, oNullable: Out<String>?) {
val y: Out<*> = when {
x > 0 -> when {
x == 1 -> o
// Once elvis is being analyzed with expected type Out<*>, because of the @Exact annotation it sticks to that type
// While here, it's better to use the Out<String> type from the main branch
else -> oNullable ?: myOut()
}
else -> myOut<Any?>()
}
}