FIR checker: fix REFERENCE_BY_QUALIFIED positioning strategy to consider callable reference
This commit is contained in:
committed by
Mikhail Glukhikh
parent
8d8ed4cc18
commit
bfc7eb7bab
+2
-2
@@ -7,5 +7,5 @@ fun foo(y: String) {}
|
||||
fun <T> bar(f: (T) -> Unit) {}
|
||||
|
||||
fun test() {
|
||||
bar(<!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
}
|
||||
bar(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,6 +10,6 @@ fun A.foo() = ""
|
||||
|
||||
class A {
|
||||
fun main() {
|
||||
bar(<!UNRESOLVED_REFERENCE!>::foo<!>) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
bar(::<!UNRESOLVED_REFERENCE!>foo<!>) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -3,14 +3,14 @@
|
||||
fun fun1() {}
|
||||
fun fun1(x: Int) {}
|
||||
|
||||
val ref1 = <!UNRESOLVED_REFERENCE!>::fun1<!>
|
||||
val ref1 = ::<!UNRESOLVED_REFERENCE!>fun1<!>
|
||||
|
||||
fun fun2(vararg x: Int) {}
|
||||
fun fun2(x: Int) {}
|
||||
|
||||
val ref2 = <!UNRESOLVED_REFERENCE!>::fun2<!>
|
||||
val ref2 = ::<!UNRESOLVED_REFERENCE!>fun2<!>
|
||||
|
||||
fun fun3(x0: Int, vararg xs: Int) {}
|
||||
fun fun3(x0: String, vararg xs: String) {}
|
||||
|
||||
val ref3 = <!UNRESOLVED_REFERENCE!>::fun3<!>
|
||||
val ref3 = ::<!UNRESOLVED_REFERENCE!>fun3<!>
|
||||
|
||||
+1
-1
@@ -8,4 +8,4 @@ fun foo(s: String) {}
|
||||
|
||||
val x1 = ofType<() -> Unit>(::foo)
|
||||
val x2 = ofType<(String) -> Unit>(::foo)
|
||||
val x3 = <!INAPPLICABLE_CANDIDATE!>ofType<!><(Int) -> Unit>(<!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
val x3 = <!INAPPLICABLE_CANDIDATE!>ofType<!><(Int) -> Unit>(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
fun foo() {}
|
||||
fun foo(s: String) {}
|
||||
|
||||
val x1 = <!UNRESOLVED_REFERENCE!>::foo<!>
|
||||
val x1 = ::<!UNRESOLVED_REFERENCE!>foo<!>
|
||||
val x2: () -> Unit = ::foo
|
||||
val x3: (String) -> Unit = ::foo
|
||||
val x4: (Int) -> Unit = <!UNRESOLVED_REFERENCE!>::foo<!>
|
||||
val x4: (Int) -> Unit = ::<!UNRESOLVED_REFERENCE!>foo<!>
|
||||
|
||||
+2
-2
@@ -31,9 +31,9 @@ fun test() {
|
||||
val t3 = bar(::baz)
|
||||
t3
|
||||
|
||||
bar(<!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
bar(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T, R> myWith(receiver: T, block: T.() -> R): R = TODO()
|
||||
inline fun <T, R> myWith(receiver: T, block: T.() -> R): R = TODO()
|
||||
|
||||
+2
-2
@@ -31,5 +31,5 @@ fun test() {
|
||||
val a6 = foo(::singleA, ::singleB)
|
||||
a6
|
||||
|
||||
foo(<!UNRESOLVED_REFERENCE!>::multiple<!>, <!UNRESOLVED_REFERENCE!>::multiple<!>)
|
||||
}
|
||||
foo(::<!UNRESOLVED_REFERENCE!>multiple<!>, ::<!UNRESOLVED_REFERENCE!>multiple<!>)
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,4 +6,4 @@ import kotlin.reflect.KProperty0
|
||||
object A
|
||||
|
||||
fun <TProperty> property0(property: KProperty0<TProperty>) = A
|
||||
val <K> K.key get() : A = <!INAPPLICABLE_CANDIDATE!>property0<!>(<!UNRESOLVED_REFERENCE!>Map.Entry<K, *>::key<!>) // should be forbidden
|
||||
val <K> K.key get() : A = <!INAPPLICABLE_CANDIDATE!>property0<!>(Map.Entry<K, *>::<!UNRESOLVED_REFERENCE!>key<!>) // should be forbidden
|
||||
|
||||
compiler/testData/diagnostics/tests/callableReference/resolve/moreSpecificAmbiguousExtensions.fir.kt
Vendored
+4
-4
@@ -9,13 +9,13 @@ fun IB.extFun(x: IA) {}
|
||||
|
||||
fun test() {
|
||||
val extFun1 = IA::extFun
|
||||
val extFun2 = <!UNRESOLVED_REFERENCE!>IB::extFun<!>
|
||||
val extFun2 = IB::<!UNRESOLVED_REFERENCE!>extFun<!>
|
||||
}
|
||||
|
||||
fun testWithExpectedType() {
|
||||
val extFun_AB_A: IA.(IB) -> Unit = IA::extFun
|
||||
val extFun_AA_B: IA.(IA) -> Unit = <!UNRESOLVED_REFERENCE!>IB::extFun<!>
|
||||
val extFun_AA_B: IA.(IA) -> Unit = IB::<!UNRESOLVED_REFERENCE!>extFun<!>
|
||||
val extFun_BB_A: IB.(IB) -> Unit = IA::extFun
|
||||
val extFun_BA_B: IB.(IA) -> Unit = IB::extFun
|
||||
val extFun_BB_B: IB.(IB) -> Unit = <!UNRESOLVED_REFERENCE!>IB::extFun<!>
|
||||
}
|
||||
val extFun_BB_B: IB.(IB) -> Unit = IB::<!UNRESOLVED_REFERENCE!>extFun<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ fun test() {
|
||||
|
||||
B::bar checkType { _<KFunction1<B, Unit>>() }
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>B::bas<!>
|
||||
B::<!UNRESOLVED_REFERENCE!>bas<!>
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>::fas<!>
|
||||
::<!UNRESOLVED_REFERENCE!>fas<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -11,6 +11,6 @@ fun <T> baz(e: T, f: (T) -> Unit) {}
|
||||
|
||||
fun test(a: A, b: B) {
|
||||
// Note that diagnostic is always on callable references as they are resolved after simple arguments
|
||||
<!INAPPLICABLE_CANDIDATE!>baz<!>(a, <!UNRESOLVED_REFERENCE!>::fooB<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(<!UNRESOLVED_REFERENCE!>::fooB<!>, a)
|
||||
<!INAPPLICABLE_CANDIDATE!>baz<!>(a, ::<!UNRESOLVED_REFERENCE!>fooB<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::<!UNRESOLVED_REFERENCE!>fooB<!>, a)
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,5 +6,5 @@ fun foo(s: String) {}
|
||||
fun bar(f: () -> Unit) = 1
|
||||
fun bar(f: (String) -> Unit) = 2
|
||||
|
||||
val x1 = <!UNRESOLVED_REFERENCE!>::foo<!> as () -> Unit
|
||||
val x2 = bar(<!UNRESOLVED_REFERENCE!>::foo<!> as (String) -> Unit)
|
||||
val x1 = ::<!UNRESOLVED_REFERENCE!>foo<!> as () -> Unit
|
||||
val x2 = bar(::<!UNRESOLVED_REFERENCE!>foo<!> as (String) -> Unit)
|
||||
|
||||
+2
-2
@@ -14,14 +14,14 @@ class A {
|
||||
|
||||
fun A.foo(): String = "A"
|
||||
|
||||
val x0 = <!UNRESOLVED_REFERENCE!>A::foo<!>
|
||||
val x0 = A::<!UNRESOLVED_REFERENCE!>foo<!>
|
||||
|
||||
val x1 = ofType<(A) -> Unit>(A::foo)
|
||||
val x2 = ofType<KProperty1<A, Int>>(A::foo)
|
||||
val x3: KProperty1<A, Int> = A::foo
|
||||
val x4: (A) -> String = A::foo
|
||||
|
||||
val y0 = <!UNRESOLVED_REFERENCE!>A::bar<!>
|
||||
val y0 = A::<!UNRESOLVED_REFERENCE!>bar<!>
|
||||
val y1 = ofType<(A) -> Unit>(A::bar)
|
||||
val y2 = ofType<KProperty1<A, Int>>(A::bar)
|
||||
val y3: KProperty1<A, Int> = A::bar
|
||||
|
||||
+1
-1
@@ -9,4 +9,4 @@ fun foo(s: String) {}
|
||||
|
||||
val x1 = apply(1, ::foo)
|
||||
val x2 = apply("hello", ::foo)
|
||||
val x3 = <!INAPPLICABLE_CANDIDATE!>apply<!>(true, <!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
val x3 = <!INAPPLICABLE_CANDIDATE!>apply<!>(true, ::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ val x1 = fn1(1, ::foo, ::foo)
|
||||
val x2 = fn1(1, ::foo, ::bar)
|
||||
|
||||
val x3 = fn2(::bar, ::foo)
|
||||
val x4 = <!AMBIGUITY!>fn2<!>(<!UNRESOLVED_REFERENCE!>::foo<!>, ::bar)
|
||||
val x5 = <!AMBIGUITY!>fn2<!>(<!UNRESOLVED_REFERENCE!>::foo<!>, <!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
val x4 = <!AMBIGUITY!>fn2<!>(::<!UNRESOLVED_REFERENCE!>foo<!>, ::bar)
|
||||
val x5 = <!AMBIGUITY!>fn2<!>(::<!UNRESOLVED_REFERENCE!>foo<!>, ::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
|
||||
val x6 = fn3(1, ::qux)
|
||||
|
||||
Reference in New Issue
Block a user