[FIR] Always report when named arguments are not allowed

#KT-59177 Fixed
This commit is contained in:
Brian Norman
2023-06-07 15:24:03 -05:00
committed by Space Team
parent 61ed34f4b7
commit 92cb47a8f9
7 changed files with 29 additions and 36 deletions
@@ -43,10 +43,10 @@ class TooManyArguments(
) : ResolutionDiagnostic(INAPPLICABLE_ARGUMENTS_MAPPING_ERROR)
class NamedArgumentNotAllowed(
override val argument: FirExpression,
val argument: FirExpression,
val function: FirFunction,
val forbiddenNamedArgumentsTarget: ForbiddenNamedArgumentsTarget
) : InapplicableArgumentDiagnostic()
) : ResolutionDiagnostic(INAPPLICABLE_ARGUMENTS_MAPPING_ERROR)
class ArgumentPassedTwice(
override val argument: FirExpression,
@@ -6,6 +6,6 @@ class A(foo: Int.() -> Unit) {
fun test(foo: Int.(String) -> Unit) {
4.foo("")
4.foo(<!NO_VALUE_FOR_PARAMETER!>p1 = "")<!>
4.foo(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED!>p1<!> = "")<!>
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p2<!> = "")
}
@@ -1,27 +0,0 @@
// FILE: JavaSuperClass.java
public class JavaSuperClass {
public void foo(int javaName) {}
public void multipleParameters(int first, long second, String third) {}
}
// FILE: 1.kt
fun directInvocation() = JavaSuperClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName<!> = 1)
open class KotlinSubClass : JavaSuperClass()
fun viaFakeOverride() = KotlinSubClass().foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>javaName<!> = 2)
class KotlinSubSubClass : KotlinSubClass() {
override fun foo(kotlinName: Int) {}
}
fun viaRealOverride() = KotlinSubSubClass().foo(kotlinName = 3)
fun unresolvedParameter() = JavaSuperClass().foo(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>nonexistentName<!> = 4)<!>
fun multipleParameters() = JavaSuperClass().multipleParameters(<!NAMED_ARGUMENTS_NOT_ALLOWED!>first<!> = 1, <!NAMED_ARGUMENTS_NOT_ALLOWED!>second<!> = 2L, <!NAMED_ARGUMENTS_NOT_ALLOWED!>third<!> = "3")
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: JavaSuperClass.java
public class JavaSuperClass {
@@ -13,15 +13,24 @@ fun test1(f: Function1Impl) {
fun test2(f: (String) -> Unit) {
f("")
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
f.invoke("")
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
}
fun test3(f: String.(String) -> Unit) {
"".f("")
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_PARAMETER_NOT_FOUND!>zzz<!> = "")<!>
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>zzz<!> = "")<!>
}
fun test4(f: (myParamName: String) -> Unit) {
f("")
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
f.invoke("")
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>myParamName<!> = "")<!>
}
@@ -25,3 +25,12 @@ fun test3(f: String.(String) -> Unit) {
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
"".f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>zzz<!> = "")<!>
}
fun test4(f: (myParamName: String) -> Unit) {
f("")
f(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f(<!NAMED_ARGUMENTS_NOT_ALLOWED!>myParamName<!> = "")
f.invoke("")
f.invoke(<!NO_VALUE_FOR_PARAMETER!><!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = "")<!>
f.invoke(<!NAMED_ARGUMENTS_NOT_ALLOWED!>myParamName<!> = "")
}
@@ -3,6 +3,7 @@ package
public fun test1(/*0*/ f: Function1Impl): kotlin.Unit
public fun test2(/*0*/ f: (kotlin.String) -> kotlin.Unit): kotlin.Unit
public fun test3(/*0*/ f: kotlin.String.(kotlin.String) -> kotlin.Unit): kotlin.Unit
public fun test4(/*0*/ f: (myParamName: kotlin.String) -> kotlin.Unit): kotlin.Unit
public final class Function1Impl : (kotlin.String) -> kotlin.Unit {
public constructor Function1Impl()