K2: implement BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION

#KT-59390 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-11-29 08:09:41 +01:00
committed by Space Team
parent 299d279915
commit 526bc1744a
25 changed files with 219 additions and 23 deletions
@@ -0,0 +1,15 @@
// WITH_STDLIB
package some
import kotlin.experimental.ExperimentalTypeInference
@OptIn(ExperimentalTypeInference::class)
fun <T> applyBI(@BuilderInference t: T): T = t
fun <V> myBuildList(a: MutableList<out V>.() -> Unit) {}
fun main() {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myBuildList<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>applyBI<!> {
<!CANNOT_INFER_PARAMETER_TYPE!>this<!>.<!UNRESOLVED_REFERENCE!>add<!>("1")
})
}
@@ -0,0 +1,15 @@
// WITH_STDLIB
package some
import kotlin.experimental.ExperimentalTypeInference
@OptIn(ExperimentalTypeInference::class)
fun <T> applyBI(@BuilderInference t: T): T = t
fun <V> myBuildList(a: MutableList<out V>.() -> Unit) {}
fun main() {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myBuildList<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>applyBI<!> {
this.<!DEBUG_INFO_MISSING_UNRESOLVED!>add<!>("1")
})
}
@@ -3,7 +3,7 @@
fun test() {
foo(
flow { emit(0) }
) { <!BUILDER_INFERENCE_STUB_RECEIVER!>it.collect <!TOO_MANY_ARGUMENTS!>{}<!><!> }
) <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ <!BUILDER_INFERENCE_STUB_RECEIVER!>it.collect <!TOO_MANY_ARGUMENTS!>{}<!><!> }<!>
// 0. Initial
// W <: Any / declared upper bound
@@ -53,4 +53,4 @@ class FlowCollectorImpl<C> : FlowCollector<C> {
override fun emit(value: C) {}
}
fun Flow<*>.collect() {}
fun Flow<*>.collect() {}
@@ -12,7 +12,7 @@ data class Output(val source: InputWrapper<List<String>>)
fun main2(input: InputWrapper<Unit>): Output {
val output = input.doMapping(
foo = { buildList { add("this is List<String>") } },
bar = { it.isNotEmpty() },
bar = <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ it.isNotEmpty() }<!>,
)
return Output(source = output)
@@ -9,9 +9,9 @@ fun <R> a(first: R, second: (List<R>) -> Unit) {}
fun test1() {
a(
buildList { add("") },
second = {
second = <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{
it.myGenericExt()
}
}<!>
)
}
@@ -23,9 +23,9 @@ fun test2() {
first = {
buildList { add("") }
},
second = {
second = <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{
it.myExt() // Note: must be extension to add constraints
}
}<!>
)
}
@@ -45,13 +45,13 @@ fun test3() {
)
select (
myBuildList { add("") },
myBuildList { add(1) },
myBuildList <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add("") }<!>,
myBuildList <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add(1) }<!>,
)
select (
run { myBuildList { add("") } },
myBuildList { add(1) },
run { myBuildList <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add("") }<!> },
myBuildList <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add(1) }<!>,
)
}
@@ -64,7 +64,7 @@ fun <D> buildPartList(left: MutableList<D>.() -> Unit, right: MutableList<D>.()
fun test4() {
buildPartList(
left = { add(1) },
right = { add("") }
left = <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add(1) }<!>,
right = <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ add("") }<!>
)
}
}