K2: implement BUILDER_INFERENCE_STUB_RECEIVER
#KT-59369 Fixed
This commit is contained in:
committed by
Space Team
parent
5e5e5b8b9f
commit
0ed6256bcc
+1
-1
@@ -12,7 +12,7 @@ fun main() {
|
||||
|
||||
buildList {
|
||||
add(Bar())
|
||||
this.get(0).test() // resolved to Any?.test
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0).test()<!> // resolved to Any?.test
|
||||
}
|
||||
buildList<Bar> {
|
||||
add(Bar())
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ FILE: errorOnStubReceiver.fir.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
R|kotlin/collections/buildList|<R|Bar|>(<L> = buildList@fun R|kotlin/collections/MutableList<Bar>|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
|
||||
this@R|special/anonymous|.R|SubstitutionOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(R|/Bar.Bar|())
|
||||
this@R|special/anonymous|.R|SubstitutionOverride<kotlin/collections/MutableList.get: R|Stub (chain inference): TypeVariable(E)|>|(Int(0)).R|/test|()
|
||||
this@R|special/anonymous|.R|SubstitutionOverride<kotlin/collections/MutableList.get: R|Stub (chain inference): TypeVariable(E)|>|(Int(0)).R|/test<Inapplicable(RESOLVED_WITH_ERROR): /test>#|()
|
||||
}
|
||||
)
|
||||
R|kotlin/collections/buildList|<R|Bar|>(<L> = buildList@fun R|kotlin/collections/MutableList<Bar>|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
|
||||
|
||||
+8
-8
@@ -76,13 +76,13 @@ fun main() {
|
||||
val list6 = buildList {
|
||||
add("one")
|
||||
|
||||
get(0).<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
get(0).<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
val list7 = buildList {
|
||||
add("one")
|
||||
|
||||
with (get(0)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
}
|
||||
val list71 = buildList {
|
||||
@@ -90,7 +90,7 @@ fun main() {
|
||||
|
||||
with (get(0)) l1@ {
|
||||
with (listOf(1)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ fun main() {
|
||||
|
||||
with (get(0)) {
|
||||
with (listOf(1)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ fun main() {
|
||||
|
||||
with (get(0)) {
|
||||
with (Inv(this)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -161,14 +161,14 @@ fun main() {
|
||||
add("one")
|
||||
|
||||
with (get(0)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo0003<!>(0f, this@l1.get(0))
|
||||
<!NONE_APPLICABLE!>foo0003<!>(0f, this@l1.get(0))
|
||||
}
|
||||
}
|
||||
|
||||
val list18 = buildList {
|
||||
add("one")
|
||||
|
||||
get(0).<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo0003<!>(0f, get(0))
|
||||
get(0).<!NONE_APPLICABLE!>foo0003<!>(0f, get(0))
|
||||
}
|
||||
|
||||
val map1 = buildMap {
|
||||
@@ -211,7 +211,7 @@ fun test() {
|
||||
add("")
|
||||
with (get()) {
|
||||
with (listOf(1)) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>()
|
||||
<!NONE_APPLICABLE!>bar<!>()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
fun test() {
|
||||
foo(
|
||||
flow { emit(0) }
|
||||
) { it.collect <!TOO_MANY_ARGUMENTS!>{}<!> }
|
||||
) { <!BUILDER_INFERENCE_STUB_RECEIVER!>it.collect <!TOO_MANY_ARGUMENTS!>{}<!><!> }
|
||||
|
||||
// 0. Initial
|
||||
// W <: Any / declared upper bound
|
||||
|
||||
Vendored
+28
-28
@@ -20,37 +20,37 @@ fun test() {
|
||||
val ret1 = build {
|
||||
emit(1)
|
||||
emit(null)
|
||||
get()?.test()
|
||||
get()?.test2()
|
||||
get().test2()
|
||||
get()?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
|
||||
get()?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
// there is `String?.equals` extension
|
||||
get().equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().equals("")<!>
|
||||
}
|
||||
val ret2 = build {
|
||||
emit(1)
|
||||
emit(null)
|
||||
get()?.test()
|
||||
get()?.test2()
|
||||
get().test2()
|
||||
get()?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
|
||||
get()?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
val x = get()
|
||||
x?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
|
||||
x?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
x.equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.equals("")<!>
|
||||
}
|
||||
val ret3 = build {
|
||||
emit(1)
|
||||
emit(null)
|
||||
get()?.test()
|
||||
get()?.test2()
|
||||
get().test2()
|
||||
get()?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
|
||||
get()?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
val x = get()
|
||||
x?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
|
||||
x?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
|
||||
if (get() == null) {}
|
||||
@@ -153,20 +153,20 @@ fun test() {
|
||||
emit(1)
|
||||
emit(null)
|
||||
val x = get()
|
||||
x.test()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.test()<!>
|
||||
|
||||
""
|
||||
}
|
||||
val ret41 = build {
|
||||
emit(1)
|
||||
emit(null)
|
||||
get()?.test()
|
||||
get()?.test2()
|
||||
get().test2()
|
||||
get()?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
|
||||
get()?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
val x = get()
|
||||
x?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
|
||||
x?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
|
||||
if (get() == null) {}
|
||||
@@ -284,19 +284,19 @@ fun test() {
|
||||
emit(1)
|
||||
emit(null)
|
||||
val x = get()
|
||||
x.test()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x.test()<!>
|
||||
""
|
||||
}
|
||||
val ret51 = build {
|
||||
emit(1)
|
||||
emit(null)
|
||||
get()?.test()
|
||||
get()?.test2()
|
||||
get().test2()
|
||||
get()?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get().test2()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()?.hashCode()<!>
|
||||
get()?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
val x = get()
|
||||
x?.hashCode()
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x?.hashCode()<!>
|
||||
x?.<!NONE_APPLICABLE!>equals<!>(1)
|
||||
|
||||
if (get() == null) {}
|
||||
|
||||
Vendored
+6
-6
@@ -25,27 +25,27 @@ fun <R1 : R2, R2> build4(x: R2, block: TestInterface<R1>.() -> Unit): R1 = TODO(
|
||||
fun test(a: String?) {
|
||||
val ret1 = build {
|
||||
emit(1)
|
||||
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
val x = get()
|
||||
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
x <!USELESS_ELVIS!>?: 1<!>
|
||||
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
""
|
||||
}
|
||||
val ret2 = build2 {
|
||||
emit(1)
|
||||
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
val x = get()
|
||||
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
x <!USELESS_ELVIS!>?: 1<!>
|
||||
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
""
|
||||
}
|
||||
val ret3 = build3 {
|
||||
emit(1)
|
||||
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
val x = get()
|
||||
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
|
||||
x <!USELESS_ELVIS!>?: 1<!>
|
||||
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
""
|
||||
|
||||
+20
-20
@@ -9,9 +9,9 @@ fun use(p: Any?) {}
|
||||
|
||||
fun test1() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
|
||||
this.get(0).extension()
|
||||
use(this.get(0)::extension)
|
||||
use(it::extension)
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0).extension()<!>
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)::extension<!>)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it::extension<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,9 @@ fun test1() {
|
||||
fun test2() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
|
||||
val v = this.get(0)
|
||||
v.extension()
|
||||
use(v::extension)
|
||||
use(it::extension)
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v.extension()<!>
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v::extension<!>)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it::extension<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ fun test3() {
|
||||
operator fun <T> T.getValue(thisRef: Any?, prop: Any?): T = this
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
|
||||
val v by this.get(0)
|
||||
v.extension()
|
||||
use(v::extension)
|
||||
use(it::extension)
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v.extension()<!>
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v::extension<!>)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it::extension<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,9 +42,9 @@ fun test4() {
|
||||
operator fun <T> Box<T>.getValue(thisRef: Any?, prop: Any?): T = this.t
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
|
||||
val v by this.get(0)
|
||||
v.extension()
|
||||
v.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>extension<!>()
|
||||
use(v::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it::extension<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,20 +53,20 @@ fun <R> b(lambda: R.(List<R>) -> Unit) {}
|
||||
fun test5() {
|
||||
|
||||
operator fun <T> T.invoke(): T = this
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>b<!> {
|
||||
extension()
|
||||
this().extension()
|
||||
use(::extension)
|
||||
b {
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>extension()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!><!BUILDER_INFERENCE_STUB_RECEIVER!>this()<!>.extension()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>use(<!BUILDER_INFERENCE_STUB_RECEIVER!>::extension<!>)<!>
|
||||
}
|
||||
}
|
||||
|
||||
val <T> T.genericLambda: T.((T) -> Unit) -> Unit get() = {}
|
||||
|
||||
fun test6() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>b<!> {
|
||||
extension()
|
||||
genericLambda { }
|
||||
genericLambda { it.extension() }
|
||||
use(::extension)
|
||||
b {
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>extension()<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>genericLambda { }<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>genericLambda { it.extension() }<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>use(<!BUILDER_INFERENCE_STUB_RECEIVER!>::extension<!>)<!>
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user