FIR: introduce & use REFERENCE_BY_QUALIFIER positioning strategy

This commit is contained in:
Mikhail Glukhikh
2021-02-18 11:54:22 +03:00
parent 0accaf0f30
commit 34c90aab3b
138 changed files with 415 additions and 372 deletions
@@ -7,5 +7,5 @@ fun Int.invoke(a: Any, i: Int) {}
fun foo(i: Int) {
<!AMBIGUITY!>i<!>(1, 1)
<!AMBIGUITY!>5(1, 2)<!>
<!AMBIGUITY!>5<!>(1, 2)
}
@@ -6,5 +6,5 @@ class My {
fun My.foo(i: Int) {
<!HIDDEN!>i<!>("")
<!HIDDEN!>1("")<!>
<!HIDDEN!>1<!>("")
}
@@ -7,5 +7,5 @@ fun test1(f: String.() -> Unit) {
fun test2(f: (Int) -> Int) {
1.<!UNRESOLVED_REFERENCE!>f<!>(2)
2.(<!UNRESOLVED_REFERENCE!>f<!>)(2)
2.<!UNRESOLVED_REFERENCE!>(f)<!>(2)
}
@@ -10,5 +10,5 @@ fun foo(s: String, ai: A<Int>) {
<!INAPPLICABLE_CANDIDATE!>s<!>(ai)
<!INAPPLICABLE_CANDIDATE!>""(ai)<!>
<!INAPPLICABLE_CANDIDATE!>""<!>(ai)
}
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
fun foo(i: Int) {
<!UNRESOLVED_REFERENCE!>i<!>()
<!UNRESOLVED_REFERENCE!>1()<!>
<!UNRESOLVED_REFERENCE!>1<!>()
}
@@ -6,5 +6,5 @@ operator fun String.invoke(i: Int) {}
fun foo(s: String?) {
<!UNSAFE_IMPLICIT_INVOKE_CALL!>s<!>(1)
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(s ?: null)(1)<!>
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(s ?: null)<!>(1)
}
@@ -1,17 +1,17 @@
// !WITH_NEW_INFERENCE
fun test1() {
1. <!UNRESOLVED_REFERENCE!>(fun String.(i: Int) = i )(1)<!>
1.<!UNRESOLVED_REFERENCE!>(label@ fun String.(i: Int) = i )(1)<!>
1. <!UNRESOLVED_REFERENCE!>(fun String.(i: Int) = i )<!>(1)
1.<!UNRESOLVED_REFERENCE!>(label@ fun String.(i: Int) = i )<!>(1)
}
fun test2(f: String.(Int) -> Unit) {
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)(1)
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)()
11.<!INAPPLICABLE_CANDIDATE!>(f)<!>(1)
11.<!INAPPLICABLE_CANDIDATE!>(f)<!>()
}
fun test3() {
fun foo(): String.(Int) -> Unit = {}
1.<!UNRESOLVED_REFERENCE!>(foo())(1)<!>
1.<!UNRESOLVED_REFERENCE!>(foo())<!>(1)
}
@@ -6,5 +6,5 @@ fun String.invoke(i: Int) {}
fun foo(i: Int) {
<!INAPPLICABLE_CANDIDATE!>i<!>(1)
<!INAPPLICABLE_CANDIDATE!>1(1)<!>
<!INAPPLICABLE_CANDIDATE!>1<!>(1)
}
@@ -2,17 +2,17 @@ class A(val x: (String.() -> Unit)?)
fun test(a: A) {
if (a.x != null) {
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
"".<!UNRESOLVED_REFERENCE!>(a.x)<!>()
a.x("") // todo
(a.x)("")
}
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
"".<!UNRESOLVED_REFERENCE!>(a.x)<!>()
a.<!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>("")
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)("")<!>
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>("")
with("") {
a.<!INAPPLICABLE_CANDIDATE!>x<!>()
<!INAPPLICABLE_CANDIDATE!>(a.x)()<!>
<!INAPPLICABLE_CANDIDATE!>(a.x)<!>()
if (a.x != null) {
a.<!INAPPLICABLE_CANDIDATE!>x<!>() // todo
(a.x)()
@@ -8,7 +8,7 @@ class B
val A.foo: B.() -> Unit get() = {}
fun test(a: A, b: B) {
b.<!UNRESOLVED_REFERENCE!>(a.foo)()<!>
b.<!UNRESOLVED_REFERENCE!>(a.foo)<!>()
(a.foo)(b)
a.foo(b)
@@ -17,7 +17,7 @@ fun test(a: A, b: B) {
b.(foo)()
<!INAPPLICABLE_CANDIDATE!>(b.<!INAPPLICABLE_CANDIDATE!>foo<!>)()<!>
<!INAPPLICABLE_CANDIDATE!>(b.<!INAPPLICABLE_CANDIDATE!>foo<!>)<!>()
foo(b)
(foo)(b)
@@ -25,7 +25,7 @@ fun test(a: A, b: B) {
with(b) {
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
a.<!INAPPLICABLE_CANDIDATE!>(foo)<!>()
(a.foo)()
@@ -50,7 +50,7 @@ class A {
class B
fun test(a: A, b: B) {
b.<!UNRESOLVED_REFERENCE!>(a.foo)()<!>
b.<!UNRESOLVED_REFERENCE!>(a.foo)<!>()
(a.foo)(b)
a.foo(b)
@@ -59,7 +59,7 @@ fun test(a: A, b: B) {
b.(foo)()
<!UNRESOLVED_REFERENCE!>(b.<!UNRESOLVED_REFERENCE!>foo<!>)()<!>
<!UNRESOLVED_REFERENCE!>(b.<!UNRESOLVED_REFERENCE!>foo<!>)<!>()
foo(b)
(foo)(b)
@@ -67,7 +67,7 @@ fun test(a: A, b: B) {
with(b) {
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
a.<!INAPPLICABLE_CANDIDATE!>(foo)<!>()
(a.foo)()