[FIR] Show ARGUMENTS_MAPPING_ERROR diagnostics along with INAPPLICABLE

K1 reports `ARGUMENT_TYPE_MISMATCH`
and `TOO_MANY_ARGUMENTS` together, and
one way to do it in K2 is to say that
their kinds of inapplicability difference
is not relevant to the user.

Note that K1 doesn't do such filtering,
so this change "makes K2 closer to K1",
but still different.

^KT-62541 Fixed

fixup! [FIR] Show ARGUMENTS_MAPPING_ERROR diagnostics along with INAPPLICABLE
This commit is contained in:
Nikolay Lunyak
2023-10-13 16:00:49 +03:00
committed by Space Team
parent 06b3c6ec13
commit fedadfb8db
17 changed files with 37 additions and 26 deletions
@@ -3,7 +3,7 @@
fun foo(i1: Int) {}
fun test() {
foo("",
foo(<!ARGUMENT_TYPE_MISMATCH!>""<!>,
<!TOO_MANY_ARGUMENTS!>2<!>
)
}
@@ -12,17 +12,17 @@ fun test() {
bar <!TOO_MANY_ARGUMENTS!>{ }<!>
foo("", 1, <!TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE!>xx<!>)
foo(<!ARGUMENT_TYPE_MISMATCH!>""<!>, <!ARGUMENT_TYPE_MISMATCH!>1<!>, <!TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE!>xx<!>)
foo(<!NAMED_PARAMETER_NOT_FOUND!>r<!> = <!UNRESOLVED_REFERENCE!>xx<!>, i = "", s = "")
foo(<!NAMED_PARAMETER_NOT_FOUND!>r<!> = <!UNRESOLVED_REFERENCE!>xx<!>, i = <!ARGUMENT_TYPE_MISMATCH!>""<!>, s = "")
foo(i = 1, <!ARGUMENT_PASSED_TWICE!>i<!> = 1, s = <!ARGUMENT_TYPE_MISMATCH!>11<!>)
foo(<!ARGUMENT_TYPE_MISMATCH!>""<!>, s = <!ARGUMENT_TYPE_MISMATCH!>2<!>)
foo(i = "", s = 2, <!TOO_MANY_ARGUMENTS!>33<!>)
foo(i = <!ARGUMENT_TYPE_MISMATCH!>""<!>, s = <!ARGUMENT_TYPE_MISMATCH!>2<!>, <!TOO_MANY_ARGUMENTS!>33<!>)
foo("", 1) <!TOO_MANY_ARGUMENTS!>{}<!>
foo(<!ARGUMENT_TYPE_MISMATCH!>""<!>, <!ARGUMENT_TYPE_MISMATCH!>1<!>) <!TOO_MANY_ARGUMENTS!>{}<!>
foo("", 1) <!TOO_MANY_ARGUMENTS!>{}<!> <!MANY_LAMBDA_EXPRESSION_ARGUMENTS!>{}<!>
foo(<!ARGUMENT_TYPE_MISMATCH!>""<!>, <!ARGUMENT_TYPE_MISMATCH!>1<!>) <!TOO_MANY_ARGUMENTS!>{}<!> <!MANY_LAMBDA_EXPRESSION_ARGUMENTS!>{}<!>
}
@@ -1,13 +1,13 @@
// WITH_STDLIB
// FILE: test.kt
val bar2 by bar2<!NO_VALUE_FOR_PARAMETER!>()<!>
val bar2 by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar2<!><!NO_VALUE_FOR_PARAMETER!>()<!>
// FILE: lt/neworld/compiler/Foo.kt
package lt.neworld.compiler
class Foo {
val bar by bar<!NO_VALUE_FOR_PARAMETER!>()<!>
val bar by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!><!NO_VALUE_FOR_PARAMETER!>()<!>
}
// FILE: lt/neworld/compiler/bar/Bar.kt
@@ -6,6 +6,6 @@ class A(foo: Int.() -> Unit) {
fun test(foo: Int.(String) -> Unit) {
4.foo("")
4.foo(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED!>p1<!> = "")<!>
4.foo(<!NO_VALUE_FOR_PARAMETER!><!ARGUMENT_PASSED_TWICE, NAMED_ARGUMENTS_NOT_ALLOWED!>p1<!> = "")<!>
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p2<!> = "")
}
@@ -15,7 +15,7 @@ fun test() {
bar(z = "")
bar<!NO_VALUE_FOR_PARAMETER!>()<!>
bar(<!NO_VALUE_FOR_PARAMETER!>"")<!>
bar(<!NO_VALUE_FOR_PARAMETER!><!ARGUMENT_TYPE_MISMATCH!>""<!>)<!>
bar(1, 1, "")
bar(1, 1, "")
bar(1, z = "")
@@ -15,5 +15,5 @@ fun main() {
1.set(2, z = 1)
1[2] += 1
1.set(2, <!NO_VALUE_FOR_PARAMETER!>1)<!>
1.set(2, <!NO_VALUE_FOR_PARAMETER!><!ARGUMENT_TYPE_MISMATCH!>1<!>)<!>
}
@@ -4,7 +4,7 @@ class X<V>(provider: () -> V, trackValue: Boolean) {
}
class B {
val c = <!NO_VALUE_FOR_PARAMETER!>X<!><String> {
val c = <!NO_VALUE_FOR_PARAMETER!>X<!><String> <!ARGUMENT_TYPE_MISMATCH!>{
"e"
}
}<!>
}
@@ -6,7 +6,7 @@ fun test1() {
fun test2(f: String.(Int) -> Unit) {
<!ARGUMENT_TYPE_MISMATCH!>11<!>.(f)(1)
11.(f)<!NO_VALUE_FOR_PARAMETER!>()<!>
<!ARGUMENT_TYPE_MISMATCH!>11<!>.(f)<!NO_VALUE_FOR_PARAMETER!>()<!>
}
fun test3() {
@@ -8,6 +8,6 @@ class SomeClass
fun test(identifier: SomeClass, fn: String.() -> Unit) {
<!NONE_APPLICABLE!>identifier<!>()
<!NONE_APPLICABLE!>identifier<!>(123)
identifier(1, <!TOO_MANY_ARGUMENTS!>2<!>)
identifier(<!ARGUMENT_TYPE_MISMATCH!>1<!>, <!TOO_MANY_ARGUMENTS!>2<!>)
<!ARGUMENT_TYPE_MISMATCH!>1<!>.fn()
}
@@ -82,8 +82,8 @@ fun testVararg() {
varargFn(1,2,3) // comment
// comment
<!VARARG_OUTSIDE_PARENTHESES!>{}<!>
varargFn(1,2,3) {} <!MANY_LAMBDA_EXPRESSION_ARGUMENTS!>{}<!>
varargFn(1,2,3) {}
varargFn(1,2,3) <!VARARG_OUTSIDE_PARENTHESES!>{}<!> <!MANY_LAMBDA_EXPRESSION_ARGUMENTS!>{}<!>
varargFn(1,2,3) <!VARARG_OUTSIDE_PARENTHESES!>{}<!>
<!MANY_LAMBDA_EXPRESSION_ARGUMENTS!>{}<!>
}
@@ -6,6 +6,6 @@ public @interface A {
}
// FILE: b.kt
@A(<!POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION!>false<!>,
@A(<!ARGUMENT_TYPE_MISMATCH, POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION!>false<!>,
<!POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION!>1.0<!>,
<!POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION!>false<!>, <!TOO_MANY_ARGUMENTS!>1<!>, <!TOO_MANY_ARGUMENTS!>2<!>) fun foo1() {}