[FIR] Resolve elvis call as special synthetic call
Before that commit we desugared `a ?: b` as
when (val elvis = a) {
null -> b
else -> elvis
}
It was incorrect, because `a` should be resolved in dependent mode,
but when it was `elvis` initializer it was resolved in independent
mode, so we can't infer type for `a` in some complex cases
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
// ISSUE: KT-39012
|
||||
|
||||
interface A
|
||||
|
||||
fun <T> foo(f: (MutableList<T>) -> Unit): List<T>? = TODO()
|
||||
fun <T> listOf(): List<T> = TODO()
|
||||
|
||||
fun bar1(w: List<CharSequence>): List<CharSequence>? {
|
||||
return foo { container ->
|
||||
container.add("")
|
||||
} ?: w
|
||||
}
|
||||
|
||||
fun bar2(): List<CharSequence>? {
|
||||
return foo { container ->
|
||||
container.add("")
|
||||
} ?: listOf()
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
FILE: lambdaInElvis.kt
|
||||
public abstract interface A : R|kotlin/Any| {
|
||||
}
|
||||
public final fun <T> foo(f: R|(kotlin/collections/MutableList<T>) -> kotlin/Unit|): R|kotlin/collections/List<T>?| {
|
||||
^foo R|kotlin/TODO|()
|
||||
}
|
||||
public final fun <T> listOf(): R|kotlin/collections/List<T>| {
|
||||
^listOf R|kotlin/TODO|()
|
||||
}
|
||||
public final fun bar1(w: R|kotlin/collections/List<kotlin/CharSequence>|): R|kotlin/collections/List<kotlin/CharSequence>?| {
|
||||
^bar1 R|/foo|<R|kotlin/CharSequence|>(<L> = foo@fun <anonymous>(container: R|kotlin/collections/MutableList<kotlin/CharSequence>|): R|kotlin/Unit| {
|
||||
^ R|<local>/container|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(String())
|
||||
}
|
||||
) ?: R|<local>/w|
|
||||
}
|
||||
public final fun bar2(): R|kotlin/collections/List<kotlin/CharSequence>?| {
|
||||
^bar2 R|/foo|<R|kotlin/CharSequence|>(<L> = foo@fun <anonymous>(container: R|kotlin/collections/MutableList<kotlin/CharSequence>|): R|kotlin/Unit| {
|
||||
^ R|<local>/container|.R|FakeOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(String())
|
||||
}
|
||||
) ?: R|/listOf|<R|kotlin/CharSequence|>()
|
||||
}
|
||||
Reference in New Issue
Block a user