Add argument unwrapping for case when argument is named

This commit is contained in:
Ivan Kylchik
2020-07-31 19:47:26 +03:00
committed by Mikhail Glukhikh
parent 2e2099afae
commit 0a28e5e031
13 changed files with 42 additions and 43 deletions
@@ -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")
@@ -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)
@@ -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 = "")
@@ -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()
}
@@ -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()
}
@@ -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,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"))
@@ -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)
@@ -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)
@@ -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)
}
@@ -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))
}