FIR checkers: report specific errors instead of INAPPLICABLE_CANDIDATE

Specifically, the report the following 4 errors.

* NON_VARARG_SPREAD
* ARGUMENT_PASSED_TWICE
* TOO_MANY_ARGUMENTS
* NO_VALUE_FOR_PARAMETER

Also added/updated the following position strategies.
* NAME_OF_NAMED_ARGUMENT
* VALUE_ARGUMENTS
This commit is contained in:
Tianyu Geng
2021-03-04 14:01:32 -08:00
committed by Mikhail Glukhikh
parent fc8d0e3ee0
commit 761a0a7d0d
143 changed files with 526 additions and 470 deletions
@@ -20,7 +20,7 @@ class A
infix operator fun A.plus(a : Any) {
1.foo()
true.<!INAPPLICABLE_CANDIDATE!>foo<!>()
true.foo(<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
1
}
@@ -16,7 +16,7 @@ class C : T {
super.foo() // OK
super.<!UNRESOLVED_REFERENCE!>bar<!>() // Error
super.buzz() // OK, resolved to a member
super.<!INAPPLICABLE_CANDIDATE!>buzz1<!>() // Resolved to an extension
super.buzz1(<!NO_VALUE_FOR_PARAMETER!>)<!> // Resolved to an extension
super.<!INAPPLICABLE_CANDIDATE!>buzz1<!>("") // Resolved to a member
}
}
}
@@ -20,8 +20,8 @@ fun Int.foo() {}
fun test3(s: String?) {
"".<!INAPPLICABLE_CANDIDATE!>foo<!>()
s<!UNSAFE_CALL!>.<!>foo()
"".<!INAPPLICABLE_CANDIDATE!>foo<!>(1)
s.<!INAPPLICABLE_CANDIDATE!>foo<!>("a")
"".foo(<!TOO_MANY_ARGUMENTS!>1<!>)
s.foo(<!TOO_MANY_ARGUMENTS!>"a"<!>)
}
interface A
@@ -6,6 +6,6 @@ class A(foo: Int.() -> Unit) {
fun test(foo: Int.(String) -> Unit) {
4.foo("")
4.<!INAPPLICABLE_CANDIDATE!>foo<!>(p1 = "")
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p2 = ""<!>)
4.foo(p1 = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p2<!> = "")
}