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:
committed by
Mikhail Glukhikh
parent
fc8d0e3ee0
commit
761a0a7d0d
+2
-2
@@ -4,7 +4,7 @@ class X<V>(provider: () -> V, trackValue: Boolean) {
|
||||
}
|
||||
|
||||
class B {
|
||||
val c = <!INAPPLICABLE_CANDIDATE!>X<!><String> {
|
||||
val c = <!NO_VALUE_FOR_PARAMETER!>X<String> {
|
||||
"e"
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -1,7 +1,7 @@
|
||||
fun test1(f: String.() -> Unit) {
|
||||
(<!INAPPLICABLE_CANDIDATE!>f<!>)()
|
||||
(f)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>f<!>()
|
||||
f(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
fun test2(f: (Int) -> Int) {
|
||||
|
||||
Vendored
+1
-1
@@ -7,7 +7,7 @@ fun test1() {
|
||||
|
||||
fun test2(f: String.(Int) -> Unit) {
|
||||
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)(1)
|
||||
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)()
|
||||
11.(f)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
fun test3() {
|
||||
|
||||
Vendored
+2
-2
@@ -8,7 +8,7 @@ class SomeClass
|
||||
|
||||
fun test(identifier: SomeClass, fn: String.() -> Unit) {
|
||||
<!NONE_APPLICABLE!>identifier<!>()
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>(123)
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>(1, 2)
|
||||
identifier(123<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
identifier(1, <!TOO_MANY_ARGUMENTS!>2<!>)
|
||||
1.<!INAPPLICABLE_CANDIDATE!>fn<!>()
|
||||
}
|
||||
|
||||
+3
-3
@@ -11,10 +11,10 @@ fun test(a: A) {
|
||||
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>("")
|
||||
|
||||
with("") {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>x<!>()
|
||||
<!INAPPLICABLE_CANDIDATE!>(a.x)<!>()
|
||||
a.x(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
(a.x)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
if (a.x != null) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>x<!>() // todo
|
||||
a.x(<!NO_VALUE_FOR_PARAMETER!>)<!> // todo
|
||||
(a.x)()
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+4
-4
@@ -24,8 +24,8 @@ fun test(a: A, b: B) {
|
||||
}
|
||||
|
||||
with(b) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
|
||||
a.foo(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
a.(foo)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
(a.foo)()
|
||||
|
||||
@@ -66,8 +66,8 @@ fun test(a: A, b: B) {
|
||||
}
|
||||
|
||||
with(b) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
|
||||
a.foo(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
a.(foo)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
(a.foo)()
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
class A {
|
||||
val foo: B.() -> Unit get() = null!!
|
||||
}
|
||||
|
||||
class B
|
||||
|
||||
fun test(a: A, b: B) {
|
||||
with(b) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // here must be error, because a is not extension receiver
|
||||
|
||||
a.foo(this)
|
||||
|
||||
(a.foo)()
|
||||
|
||||
(a.foo)(this)
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
class A {
|
||||
val foo: B.() -> Unit get() = null!!
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -7,7 +7,7 @@ class SomeClass
|
||||
|
||||
fun test(identifier: SomeClass, fn: String.() -> Unit) {
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>()
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>(123)
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>(1, 2)
|
||||
identifier(<!TOO_MANY_ARGUMENTS!>123<!>)
|
||||
identifier(<!TOO_MANY_ARGUMENTS!>1<!>, <!TOO_MANY_ARGUMENTS!>2<!>)
|
||||
1.<!INAPPLICABLE_CANDIDATE!>fn<!>()
|
||||
}
|
||||
|
||||
+3
-3
@@ -9,6 +9,6 @@ fun test() {
|
||||
|
||||
bar(<!INAPPLICABLE_CANDIDATE!>foo<!>(xx = zzz(11) { j: Int -> j + 7 }))
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(zz = <!INAPPLICABLE_CANDIDATE!>foo<!>(
|
||||
xx = zzz(12) { i: Int -> i + i }))
|
||||
}
|
||||
bar(zz = <!INAPPLICABLE_CANDIDATE!>foo<!>(
|
||||
xx = zzz(12) { i: Int -> i + i })<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
@@ -8,40 +8,40 @@ fun varargFn(vararg args: Int) {}
|
||||
|
||||
fun testNoArgs() {
|
||||
noArgs()
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!> {}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {}
|
||||
noArgs <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() // {}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() /* */ {}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() /*
|
||||
noArgs() /* */ <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() /*
|
||||
block comment, no new line
|
||||
*/ {}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>()
|
||||
*/ <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs()
|
||||
/*
|
||||
block comment with new line
|
||||
*/
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() // comment
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() // comment
|
||||
// comment
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {} {}
|
||||
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {}
|
||||
{}
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!> <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
}
|
||||
|
||||
fun testLambdaArg() {
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>()
|
||||
oneLambdaArg(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
oneLambdaArg {}
|
||||
oneLambdaArg()
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>()
|
||||
oneLambdaArg()
|
||||
{}
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>(
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg(
|
||||
{},
|
||||
{}
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
)
|
||||
oneLambdaArg() {}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() // {}
|
||||
oneLambdaArg(<!NO_VALUE_FOR_PARAMETER!>)<!> // {}
|
||||
oneLambdaArg() /* */ {}
|
||||
oneLambdaArg() /*
|
||||
block
|
||||
@@ -50,21 +50,21 @@ fun testLambdaArg() {
|
||||
oneLambdaArg() // comment
|
||||
// comment
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}/*
|
||||
oneLambdaArg() {}/*
|
||||
block comment, no new line
|
||||
*/ {}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}/*
|
||||
*/ <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg() {}/*
|
||||
block comment with new line
|
||||
*/
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}// comment
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg() {}// comment
|
||||
// comment
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {} {}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}
|
||||
{}
|
||||
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {} // comment
|
||||
{}
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg() {} <!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg() {}
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
oneLambdaArg() {} // comment
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
}
|
||||
|
||||
fun testVararg() {
|
||||
@@ -101,9 +101,9 @@ fun testTwoLambdas() {
|
||||
{}
|
||||
|
||||
return if (true) {
|
||||
<!INAPPLICABLE_CANDIDATE!>twoLambdaArgs<!>({})
|
||||
{}
|
||||
twoLambdaArgs({})
|
||||
{}
|
||||
<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||
} else {
|
||||
{}
|
||||
}
|
||||
@@ -112,7 +112,7 @@ fun testTwoLambdas() {
|
||||
|
||||
fun f1(): (() -> Unit) -> (() -> Unit) -> Unit {
|
||||
return { l1 ->
|
||||
<!INAPPLICABLE_CANDIDATE!>l1<!>()
|
||||
{ l2 -> <!UNRESOLVED_REFERENCE!>l2<!>() }
|
||||
l1()
|
||||
<!TOO_MANY_ARGUMENTS!>{ l2 -> <!UNRESOLVED_REFERENCE!>l2<!>() }<!>
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user