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
+5
-5
@@ -11,8 +11,8 @@ interface D : B, A
|
||||
|
||||
fun foo(x : C, y : D){
|
||||
x.foo(x = 0)
|
||||
x.<!INAPPLICABLE_CANDIDATE!>foo<!>(y = 0)
|
||||
y.<!INAPPLICABLE_CANDIDATE!>foo<!>(x = 0)
|
||||
x.foo(y = 0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
y.foo(x = 0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
y.foo(y = 0)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ abstract class D1 : A, B
|
||||
|
||||
fun bar(x : C1, y : D1){
|
||||
x.foo(x = 0)
|
||||
x.<!INAPPLICABLE_CANDIDATE!>foo<!>(y = 0)
|
||||
x.foo(y = 0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
y.foo(x = 0)
|
||||
y.<!INAPPLICABLE_CANDIDATE!>foo<!>(y = 0)
|
||||
}
|
||||
y.foo(y = 0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
+6
-6
@@ -14,11 +14,11 @@ interface C : A, B { // Warning here, this is correct
|
||||
}
|
||||
|
||||
fun test(c: C) {
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(b1 = 1, b2 = 1.0)
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(a1 = 1, b2 = 1.0)
|
||||
c.foo(b1 = 1, b2 = 1.0<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
c.foo(a1 = 1, b2 = 1.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
c.foo(a1 = 1, a2 = 1.0)
|
||||
c.foo(a1 = 1, a2 = 1.0)
|
||||
c.<!INAPPLICABLE_CANDIDATE!>bar<!>(a1 = 1, a2 = 1.0, b3= "")
|
||||
c.<!INAPPLICABLE_CANDIDATE!>baz<!>(a1 = 1, b2 = 1.0, a3 = "", b4 = 2, a5 = "")
|
||||
c.<!INAPPLICABLE_CANDIDATE!>baz<!>(a1 = 1, a2 = 1.0, a3 = "", b4 = 2, a5 = "")
|
||||
}
|
||||
c.bar(a1 = 1, a2 = 1.0, b3= ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
c.baz(a1 = 1, b2 = 1.0, a3 = "", b4 = 2, a5 = ""<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
c.baz(a1 = 1, a2 = 1.0, a3 = "", b4 = 2, a5 = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -11,5 +11,5 @@ interface C : A<Int>, B { // Warning here, this is correct
|
||||
|
||||
fun test(c: C) {
|
||||
c.foo(a = 1)
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(b = 1)
|
||||
}
|
||||
c.foo(b = 1<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -11,5 +11,5 @@ interface C : A, B { // Warning here, this is correct
|
||||
|
||||
fun test(c: C) {
|
||||
c.foo(a = 1)
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(b = 1)
|
||||
}
|
||||
c.foo(b = 1<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -11,5 +11,5 @@ interface C<U> : A<U>, B<U> { // Warning here, this is correct
|
||||
|
||||
fun test(c: C<Int>) {
|
||||
c.foo(a = 1)
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(b = 1)
|
||||
}
|
||||
c.foo(b = 1<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
// FILE: A.java
|
||||
|
||||
public class A {
|
||||
public A(int x, String y) {}
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
val test = A(<!NAMED_ARGUMENTS_NOT_ALLOWED!>x = 1<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>y = "2"<!>)
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
|
||||
public class A {
|
||||
|
||||
+4
-4
@@ -8,11 +8,11 @@ public class JavaSuperClass {
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
fun directInvocation() = JavaSuperClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName = 1<!>)
|
||||
fun directInvocation() = JavaSuperClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName<!> = 1)
|
||||
|
||||
open class KotlinSubClass : JavaSuperClass()
|
||||
|
||||
fun viaFakeOverride() = KotlinSubClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName = 2<!>)
|
||||
fun viaFakeOverride() = KotlinSubClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName<!> = 2)
|
||||
|
||||
class KotlinSubSubClass : KotlinSubClass() {
|
||||
override fun foo(kotlinName: Int) {}
|
||||
@@ -21,7 +21,7 @@ class KotlinSubSubClass : KotlinSubClass() {
|
||||
fun viaRealOverride() = KotlinSubSubClass().foo(kotlinName = 3)
|
||||
|
||||
|
||||
fun unresolvedParameter() = JavaSuperClass().<!INAPPLICABLE_CANDIDATE!>foo<!>(nonexistentName = 4)
|
||||
fun unresolvedParameter() = JavaSuperClass(<!NO_VALUE_FOR_PARAMETER!>)<!>.foo(nonexistentName = 4)
|
||||
|
||||
|
||||
fun multipleParameters() = JavaSuperClass().multipleParameters(<!NAMED_ARGUMENTS_NOT_ALLOWED!>first = 1<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>second = 2L<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>third = "3"<!>)
|
||||
fun multipleParameters() = JavaSuperClass().multipleParameters(<!NAMED_ARGUMENTS_NOT_ALLOWED!>first<!> = 1, <!NAMED_ARGUMENTS_NOT_ALLOWED!>second<!> = 2L, <!NAMED_ARGUMENTS_NOT_ALLOWED!>third<!> = "3")
|
||||
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// FILE: test/J.java
|
||||
|
||||
package test;
|
||||
|
||||
public class J {
|
||||
public J(String s, Runnable r, Boolean z) {
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: usage.kt
|
||||
|
||||
package test
|
||||
|
||||
fun test() {
|
||||
J("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r = { }<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z = false<!>)
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !WITH_NEW_INFERENCE
|
||||
// FILE: test/J.java
|
||||
|
||||
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// FILE: test/J.java
|
||||
|
||||
package test;
|
||||
|
||||
public class J {
|
||||
public static void foo(String s, Runnable r, Boolean z) {
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: usage.kt
|
||||
|
||||
package test
|
||||
|
||||
fun test() {
|
||||
J.foo("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r = { }<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z = false<!>)
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !WITH_NEW_INFERENCE
|
||||
// FILE: test/J.java
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -15,6 +15,6 @@ fun main() {
|
||||
|
||||
foo(p1 = 1, p2 = "2", 3.0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, "")
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, 3.0)
|
||||
foo(1, p3 = 2.0, ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo(1, p3 = 2.0, 3.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -15,6 +15,6 @@ fun main() {
|
||||
|
||||
foo(p1 = 1, p2 = "2", 3.0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, "")
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, 3.0)
|
||||
foo(1, p3 = 2.0, ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo(1, p3 = 2.0, 3.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -15,6 +15,6 @@ fun main() {
|
||||
|
||||
foo(p1 = 1, p2 = "2", 3.0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, "")
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, p3 = 2.0, 3.0)
|
||||
foo(1, p3 = 2.0, ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo(1, p3 = 2.0, 3.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
+7
-7
@@ -28,10 +28,10 @@ fun foo4(
|
||||
) {}
|
||||
|
||||
fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(1, 2, p2 = "3", 4.0)
|
||||
foo1(1, 2, p2 = "3", 4.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo1(p1 = intArrayOf(1, 2), "3", p3 = 4.0)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(p2 = "3", 4.0)
|
||||
foo1(p2 = "3", 4.0<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
foo2(p1 = 1, "2", "3", p3 = 4.0)
|
||||
foo2(1, p2 = arrayOf("2", "3"), 4.0)
|
||||
@@ -40,11 +40,11 @@ fun main() {
|
||||
foo3(p1 = 1, "2", 3.0, 4.0)
|
||||
foo3(p1 = 1, "2", p3 = doubleArrayOf(3.0, 4.0))
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo4<!>(p1 = 1, "2", "3", p3 = 4.0, 5)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo4<!>(1, "2", "3", p3 = 4.0, 5)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo4<!>(1, p3 = 4.0, 5)
|
||||
foo4(p1 = 1, "2", "3", p3 = 4.0, 5<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo4(1, "2", "3", p3 = 4.0, 5<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo4(1, p3 = 4.0, 5<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(1, 2, p3 = 3.0, "4")
|
||||
foo1(1, 2, p3 = 3.0, "4"<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo1(1, 2, p3 = 3.0, p2 = "4")
|
||||
foo1(*intArrayOf(1, 2), p3 = 3.0, p2 = "4")
|
||||
|
||||
@@ -52,6 +52,6 @@ fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo2<!>(1, p3 = 2.0, *arrayOf("3", "4"))
|
||||
foo2(1, p3 = 2.0, p2 = arrayOf("3", "4"))
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo3<!>(1, p3 = doubleArrayOf(2.0, 3.0), "4")
|
||||
foo3(1, p3 = doubleArrayOf(2.0, 3.0), "4"<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo3(1, p3 = doubleArrayOf(2.0, 3.0), p2 = "4")
|
||||
}
|
||||
|
||||
+5
-5
@@ -11,17 +11,17 @@ fun test() {
|
||||
foo(b = "")
|
||||
foo(1, "")
|
||||
foo(a = 2)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(1, "", "")
|
||||
foo(1, "", <!TOO_MANY_ARGUMENTS!>""<!>)
|
||||
|
||||
bar(z = "")
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>("")
|
||||
bar(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
bar(""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
bar(1, 1, "")
|
||||
bar(1, 1, "")
|
||||
bar(1, z = "")
|
||||
bar(1, z = "", y = 2)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(z = "", 1)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(1, zz = "",
|
||||
bar(1, zz = "",
|
||||
<!UNRESOLVED_REFERENCE!>zz<!>.foo
|
||||
)
|
||||
<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -18,5 +18,5 @@ fun test1(d: D) {
|
||||
}
|
||||
|
||||
fun test2(c: C) {
|
||||
c.<!INAPPLICABLE_CANDIDATE!>foo<!>(b1 = 1, b2 = 1.0)
|
||||
}
|
||||
c.foo(b1 = 1, b2 = 1.0<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user