[FIR] Skip redundant INAPPLICABLE_CANDIDATE on call with unresolved callable reference argument
A new resolution diagnostic UnsuccessfulCallableReferenceAtom is introduced that is used in EagerResolveOfCallableReferences. No diagnostic is reported on unresolved calls with this diagnostic because #KT-59856
This commit is contained in:
committed by
Space Team
parent
a55f3c5583
commit
2f3293f99e
+16
-16
@@ -27,22 +27,22 @@ interface Foo {
|
||||
// CR on property with to receivers are forbidden
|
||||
fun <T: Foo> test() {
|
||||
// with LHS and property
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
bar8<T>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
bar8<Foo>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
bar8(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
|
||||
// with LHS and mutable property
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
bar8<T>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
bar8<Foo>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
bar8(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
|
||||
// with LHS and propery + mutable property (mixed)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar8<T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar8<Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar8(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar9<T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar9<Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
bar9(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,14 +114,14 @@ fun <T : Foo, R: Number, D: Int> main() {
|
||||
bar7(Foo::resolve) // OK
|
||||
|
||||
// with LHS and sentension function expected type
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(Int::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
bar10<D>(Int::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
bar10<Int>(Int::x1) // OK
|
||||
bar10(Int::x1) // OK
|
||||
|
||||
fun Int.ext() {
|
||||
// with LHS and sentension function expected type
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><Int>(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!>(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
bar10<D>(::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
bar10<Int>(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
bar10(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@ fun foo(i: Long) {}
|
||||
fun bar(f: (Boolean) -> Unit) {}
|
||||
|
||||
fun test() {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
bar(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
}
|
||||
|
||||
@@ -5,5 +5,5 @@ fun foo(x: Float) = 10f
|
||||
fun foo(x: String) = ""
|
||||
|
||||
fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::<!UNRESOLVED_REFERENCE!>foo<!>) // no report about unresolved callable reference for `foo`
|
||||
bar(::<!UNRESOLVED_REFERENCE!>foo<!>) // no report about unresolved callable reference for `foo`
|
||||
}
|
||||
|
||||
Vendored
-7
@@ -1,7 +0,0 @@
|
||||
fun <T, U> T.map(f: (T) -> U) = f(this)
|
||||
|
||||
fun consume(s: String) {}
|
||||
|
||||
fun test() {
|
||||
consume(1.<!INAPPLICABLE_CANDIDATE!>map<!>(::<!UNRESOLVED_REFERENCE!>foo<!>))
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
fun <T, U> T.map(f: (T) -> U) = f(this)
|
||||
|
||||
fun consume(s: String) {}
|
||||
|
||||
+3
-3
@@ -274,7 +274,7 @@ fun poll76() {
|
||||
}
|
||||
|
||||
fun poll8() {
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar<!> <!INAPPLICABLE_CANDIDATE!>in<!> <!INAPPLICABLE_CANDIDATE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar<!> in setOf(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
<!UNRESOLVED_REFERENCE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ fun poll81() {
|
||||
}
|
||||
|
||||
fun poll82() {
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar3<!> <!INAPPLICABLE_CANDIDATE!>in<!> <!INAPPLICABLE_CANDIDATE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo3<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar3<!> in setOf(::<!UNRESOLVED_REFERENCE!>foo3<!>)
|
||||
<!UNRESOLVED_REFERENCE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -294,7 +294,7 @@ fun poll83() {
|
||||
}
|
||||
|
||||
fun poll84() {
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar5<!> <!INAPPLICABLE_CANDIDATE!>in<!> <!INAPPLICABLE_CANDIDATE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo5<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar5<!> in setOf(::<!UNRESOLVED_REFERENCE!>foo5<!>)
|
||||
inv
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user