Add argument unwrapping for case when argument is named
This commit is contained in:
committed by
Mikhail Glukhikh
parent
2e2099afae
commit
0a28e5e031
@@ -346,7 +346,7 @@ internal fun FirExpression.getExpectedType(
|
||||
): ConeKotlinType {
|
||||
val shouldUnwrapVarargType = when (this) {
|
||||
is FirSpreadArgumentExpression -> !isSpread
|
||||
is FirNamedArgumentExpression -> false
|
||||
is FirNamedArgumentExpression -> expression is FirConstExpression<*>
|
||||
else -> true
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// !LANGUAGE: -ProhibitAssigningSingleElementsToVarargsInNamedForm -AllowAssigningArrayElementsToVarargsInNamedFormForFunctions
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
|
||||
fun box(): String {
|
||||
if (test1(p = 1) != "1") return "fail 1"
|
||||
|
||||
@@ -12,8 +12,8 @@ fun main() {
|
||||
join(1, "2", "3")
|
||||
<!INAPPLICABLE_CANDIDATE!>join<!>(*1, "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>join<!>(1, *"2")
|
||||
<!INAPPLICABLE_CANDIDATE!>join<!>(x = 1, a = "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>join<!>(x = *1, a = *"2")
|
||||
join(x = 1, a = "2")
|
||||
join(x = *1, a = *"2")
|
||||
join(x = 1, a = a)
|
||||
<!INAPPLICABLE_CANDIDATE!>join<!>(x = 1, a = b)
|
||||
join(1, *a)
|
||||
@@ -33,8 +33,8 @@ fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!><String>(*1, "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!><String>(1, *"2")
|
||||
joinG<String>(x = 1, a = a)
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!><String>(x = 1, a = "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!><String>(x = *1, a = *"2")
|
||||
joinG<String>(x = 1, a = "2")
|
||||
joinG<String>(x = *1, a = *"2")
|
||||
joinG<String>(1, *a)
|
||||
joinG<String>(1, *a, "3")
|
||||
joinG<String>(1, "4", *a, "3")
|
||||
@@ -46,8 +46,8 @@ fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!>(*1, "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!>(1, *"2")
|
||||
joinG(x = 1, a = a)
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!>(x = 1, a = "2")
|
||||
<!INAPPLICABLE_CANDIDATE!>joinG<!>(x = *1, a = *"2")
|
||||
joinG(x = 1, a = "2")
|
||||
joinG(x = *1, a = *"2")
|
||||
joinG(1, *a)
|
||||
joinG(1, *a, "3")
|
||||
joinG(1, "4", *a, "3")
|
||||
|
||||
Vendored
+1
-1
@@ -8,6 +8,6 @@ fun overloadedFun(arg: String, vararg args: String) = X1
|
||||
fun overloadedFun(arg: String, vararg args: String, flag: Boolean = true) = X2
|
||||
|
||||
val test1a: X1 = overloadedFun("", "")
|
||||
val test1b: X1 = <!NONE_APPLICABLE!>overloadedFun<!>("", args = "")
|
||||
val test1b: X1 = overloadedFun("", args = "")
|
||||
val test1c: X2 = overloadedFun("", "", "", flag = true)
|
||||
|
||||
|
||||
+2
-2
@@ -9,5 +9,5 @@ fun overloadedFun5(s: String, vararg ss: String) = X2
|
||||
|
||||
val test1 = overloadedFun5("")
|
||||
val test2 = overloadedFun5("", "")
|
||||
val test3: X2 = <!NONE_APPLICABLE!>overloadedFun5<!>(s = "", ss = "")
|
||||
val test4: X1 = <!INAPPLICABLE_CANDIDATE!>overloadedFun5<!>(ss = "")
|
||||
val test3: X2 = overloadedFun5(s = "", ss = "")
|
||||
val test4: X1 = overloadedFun5(ss = "")
|
||||
|
||||
+1
-1
@@ -31,6 +31,6 @@ fun test_ann(s: String, arr: Array<String>) {
|
||||
|
||||
@Ann("", x = 1)
|
||||
foo()
|
||||
<!INAPPLICABLE_CANDIDATE!>@Ann(s = "", x = 1)<!>
|
||||
@Ann(s = "", x = 1)
|
||||
foo()
|
||||
}
|
||||
|
||||
+1
-1
@@ -31,6 +31,6 @@ fun test_ann(s: String, arr: Array<String>) {
|
||||
|
||||
@Ann("", x = 1)
|
||||
foo()
|
||||
<!INAPPLICABLE_CANDIDATE!>@Ann(s = "", x = 1)<!>
|
||||
@Ann(s = "", x = 1)
|
||||
foo()
|
||||
}
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@
|
||||
|
||||
annotation class Ann(vararg val s: String)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@Ann(s = "value")<!>
|
||||
@Ann(s = "value")
|
||||
fun test1() {}
|
||||
|
||||
@Ann(s = *arrayOf("value"))
|
||||
@@ -20,7 +20,7 @@ fun test2() {}
|
||||
@Ann(s = *["value"])
|
||||
fun test3() {}
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@JavaAnn(value = "value")<!>
|
||||
@JavaAnn(value = "value")
|
||||
fun test4() {}
|
||||
|
||||
@JavaAnn("value", path = arrayOf("path"))
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@
|
||||
|
||||
annotation class Ann(vararg val s: String)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@Ann(s = "value")<!>
|
||||
@Ann(s = "value")
|
||||
fun test1() {}
|
||||
|
||||
@Ann(s = *arrayOf("value"))
|
||||
@@ -20,7 +20,7 @@ fun test2() {}
|
||||
@Ann(s = *["value"])
|
||||
fun test3() {}
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@JavaAnn(value = "value")<!>
|
||||
@JavaAnn(value = "value")
|
||||
fun test4() {}
|
||||
|
||||
@JavaAnn("value", path = arrayOf("path"))
|
||||
|
||||
+11
-11
@@ -7,27 +7,27 @@ fun foo(vararg s: Int) {}
|
||||
open class Cls(vararg p: Long)
|
||||
|
||||
fun test(i: IntArray) {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(s = 1)
|
||||
foo(s = 1)
|
||||
foo(s = i)
|
||||
foo(s = *i)
|
||||
foo(s = intArrayOf(1))
|
||||
foo(s = *intArrayOf(1))
|
||||
foo(1)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1)
|
||||
Cls(p = 1)
|
||||
|
||||
class Sub : <!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1)
|
||||
class Sub : Cls(p = 1)
|
||||
|
||||
val c = object : <!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1) {}
|
||||
val c = object : Cls(p = 1) {}
|
||||
|
||||
foo(s = *<!INAPPLICABLE_CANDIDATE!>intArrayOf<!>(elements = 1))
|
||||
foo(s = *intArrayOf(elements = 1))
|
||||
}
|
||||
|
||||
|
||||
fun anyFoo(vararg a: Any) {}
|
||||
|
||||
fun testAny() {
|
||||
<!INAPPLICABLE_CANDIDATE!>anyFoo<!>(a = "")
|
||||
anyFoo(a = "")
|
||||
anyFoo(a = arrayOf(""))
|
||||
anyFoo(a = *arrayOf(""))
|
||||
}
|
||||
@@ -35,12 +35,12 @@ fun testAny() {
|
||||
fun <T> genFoo(vararg t: T) {}
|
||||
|
||||
fun testGen() {
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!><Int>(t = 1)
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!><Int?>(t = null)
|
||||
genFoo<Int>(t = 1)
|
||||
genFoo<Int?>(t = null)
|
||||
genFoo<Array<Int>>(t = arrayOf())
|
||||
genFoo<Array<Int>>(t = *arrayOf(arrayOf()))
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!>(t = "")
|
||||
genFoo(t = "")
|
||||
genFoo(t = arrayOf(""))
|
||||
genFoo(t = *arrayOf(""))
|
||||
}
|
||||
@@ -49,8 +49,8 @@ fun manyFoo(vararg v: Int) {}
|
||||
fun manyFoo(vararg s: String) {}
|
||||
|
||||
fun testMany(a: Any) {
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(v = 1)
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(s = "")
|
||||
manyFoo(v = 1)
|
||||
manyFoo(s = "")
|
||||
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(a)
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(v = a)
|
||||
|
||||
+11
-11
@@ -7,27 +7,27 @@ fun foo(vararg s: Int) {}
|
||||
open class Cls(vararg p: Long)
|
||||
|
||||
fun test(i: IntArray) {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(s = 1)
|
||||
foo(s = 1)
|
||||
foo(s = i)
|
||||
foo(s = *i)
|
||||
foo(s = intArrayOf(1))
|
||||
foo(s = *intArrayOf(1))
|
||||
foo(1)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1)
|
||||
Cls(p = 1)
|
||||
|
||||
class Sub : <!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1)
|
||||
class Sub : Cls(p = 1)
|
||||
|
||||
val c = object : <!INAPPLICABLE_CANDIDATE!>Cls<!>(p = 1) {}
|
||||
val c = object : Cls(p = 1) {}
|
||||
|
||||
foo(s = *<!INAPPLICABLE_CANDIDATE!>intArrayOf<!>(elements = 1))
|
||||
foo(s = *intArrayOf(elements = 1))
|
||||
}
|
||||
|
||||
|
||||
fun anyFoo(vararg a: Any) {}
|
||||
|
||||
fun testAny() {
|
||||
<!INAPPLICABLE_CANDIDATE!>anyFoo<!>(a = "")
|
||||
anyFoo(a = "")
|
||||
anyFoo(a = arrayOf(""))
|
||||
anyFoo(a = *arrayOf(""))
|
||||
}
|
||||
@@ -35,12 +35,12 @@ fun testAny() {
|
||||
fun <T> genFoo(vararg t: T) {}
|
||||
|
||||
fun testGen() {
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!><Int>(t = 1)
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!><Int?>(t = null)
|
||||
genFoo<Int>(t = 1)
|
||||
genFoo<Int?>(t = null)
|
||||
genFoo<Array<Int>>(t = arrayOf())
|
||||
genFoo<Array<Int>>(t = *arrayOf(arrayOf()))
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>genFoo<!>(t = "")
|
||||
genFoo(t = "")
|
||||
genFoo(t = arrayOf(""))
|
||||
genFoo(t = *arrayOf(""))
|
||||
}
|
||||
@@ -49,8 +49,8 @@ fun manyFoo(vararg v: Int) {}
|
||||
fun manyFoo(vararg s: String) {}
|
||||
|
||||
fun testMany(a: Any) {
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(v = 1)
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(s = "")
|
||||
manyFoo(v = 1)
|
||||
manyFoo(s = "")
|
||||
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(a)
|
||||
<!NONE_APPLICABLE!>manyFoo<!>(v = a)
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@ fun foo2() {}
|
||||
|
||||
fun foo(vararg i: Int) {}
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@Ann(s = "value")<!>
|
||||
@Ann(s = "value")
|
||||
fun dep1() {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(i = 1)
|
||||
foo(i = 1)
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -4,7 +4,7 @@
|
||||
annotation class Anno1(vararg val s: String)
|
||||
annotation class Anno2(vararg val i: Int)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>@Anno1(s = "foo")<!>
|
||||
@Anno1(s = "foo")
|
||||
@Anno2(i = *intArrayOf(1))
|
||||
fun f1() {}
|
||||
|
||||
@@ -15,6 +15,6 @@ fun f2() {}
|
||||
fun foo(vararg ints: Int) {}
|
||||
|
||||
fun test() {
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>(ints = 1)
|
||||
foo(ints = 1)
|
||||
foo(ints = *intArrayOf(1))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user