K2: Don't lose constraint errors in the builder inference session

Pass constraint errors from the integration system into a candidate to
make sure it is reported later.

Related to KT-59426, KT-59437, KT-53749
#KT-55168 Submitted
This commit is contained in:
Simon Ogorodnik
2023-11-29 11:58:29 +01:00
committed by Space Team
parent cb3d65f669
commit 2f367b013a
26 changed files with 99 additions and 62 deletions
@@ -13,10 +13,10 @@ fun main() {
override fun foo(): MutableList<String> = <!RETURN_TYPE_MISMATCH!>this@buildList<!>
}
}
buildList {
<!NEW_INFERENCE_ERROR!>buildList {
add(3)
val x: String = <!INITIALIZER_TYPE_MISMATCH!>get(0)<!>
}
}<!>
buildList {
add("3")
val x: MutableList<Int> = <!INITIALIZER_TYPE_MISMATCH!>this@buildList<!>
@@ -26,8 +26,8 @@ fun main() {
add(y)
val x: MutableList<String> = <!INITIALIZER_TYPE_MISMATCH!>this@buildList<!>
}
buildList {
<!NEW_INFERENCE_ERROR!>buildList {
add("")
val x: StringBuilder = <!INITIALIZER_TYPE_MISMATCH!>get(0)<!>
}
}<!>
}
@@ -26,7 +26,7 @@ fun <K> captureIn(x: Inv<out K>): K = null as K
fun <K> capture(x: Inv<K>): K = null as K
fun main() {
build {
<!NEW_INFERENCE_ERROR!>build {
emit("")
getInv()
captureOut(getInv())
@@ -35,7 +35,7 @@ fun main() {
// K is fixed into CapturedType(out NotFixed: TypeVariable(R))
capture(getOut())
""
}
}<!>
build {
emit("")
// K is fixed into CapturedType(in NotFixed: TypeVariable(R))
@@ -19,13 +19,13 @@ fun <K> capture(x: Inv<K>): K = null as K
fun <I> id(x: I): I = null as I
fun main() {
build {
<!NEW_INFERENCE_ERROR!>build {
emit("")
// K is fixed into CapturedType(out NotFixed: TypeVariable(R)
capture(id(getOut())) // unexpected TYPE_MISMATCH (KT-63996)
// capture(getOut()) // OK!!!
Unit
}
}<!>
build<String> {
emit("")
// K is fixed into CapturedType(out NotFixed: TypeVariable(R)
@@ -17,7 +17,7 @@ fun Any.test() {}
fun Any?.test2() {}
fun test() {
val ret1 = build {
val ret1 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
@@ -27,8 +27,8 @@ fun test() {
get()?.equals(1)
// there is `String?.equals` extension
get().equals("")
}
val ret2 = build {
}<!>
val ret2 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
@@ -40,8 +40,8 @@ fun test() {
x?.hashCode()
x?.equals(1)
x.equals("")
}
val ret3 = build {
}<!>
val ret3 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
@@ -68,7 +68,7 @@ fun test() {
}
""
}
}<!>
val ret4 = build {
emit(1)
emit(null)
@@ -149,15 +149,15 @@ fun test() {
""
}
val ret408 = build {
val ret408 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.test()<!>
""
}
val ret41 = build {
}<!>
val ret41 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
@@ -205,7 +205,7 @@ fun test() {
}
""
}
}<!>
val ret5 = build {
emit(1)
emit(null)
@@ -280,14 +280,14 @@ fun test() {
}
""
}
val ret508 = build {
val ret508 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
val x = get()
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.test()<!>
""
}
val ret51 = build {
}<!>
val ret51 = <!NEW_INFERENCE_ERROR!>build {
emit(1)
emit(null)
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
@@ -310,5 +310,5 @@ fun test() {
}
""
}
}<!>
}