From 0a28e5e031f71437227c9aba87955c835648a99f Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Fri, 31 Jul 2020 19:47:26 +0300 Subject: [PATCH] Add argument unwrapping for case when argument is named --- .../kotlin/fir/resolve/calls/Arguments.kt | 2 +- .../singleAssignmentToVarargsInFunction.kt | 1 - .../tests/checkArguments/SpreadVarargs.fir.kt | 12 +++++----- .../varargsInDifferentPositions.fir.kt | 2 +- .../overloadConflicts/varargsMixed.fir.kt | 4 ++-- ...assignArrayToVararagInNamedForm_1_3.fir.kt | 2 +- ...assignArrayToVararagInNamedForm_1_4.fir.kt | 2 +- ...entsInNamedFormAnnDeprecation_after.fir.kt | 4 ++-- ...ntsInNamedFormAnnDeprecation_before.fir.kt | 4 ++-- ...entsInNamedFormFunDeprecation_after.fir.kt | 22 +++++++++---------- ...ntsInNamedFormFunDeprecation_before.fir.kt | 22 +++++++++---------- .../noAssigningArraysToVarargsFeature.fir.kt | 4 ++-- ...tAssigningSingleElementsInNamedForm.fir.kt | 4 ++-- 13 files changed, 42 insertions(+), 43 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt index b655fa65db9..0971efff03e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt @@ -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 } diff --git a/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt b/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt index 8a07a67fc27..0e5d2ede730 100644 --- a/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt +++ b/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt @@ -1,5 +1,4 @@ // !LANGUAGE: -ProhibitAssigningSingleElementsToVarargsInNamedForm -AllowAssigningArrayElementsToVarargsInNamedFormForFunctions -// IGNORE_BACKEND_FIR: JVM_IR fun box(): String { if (test1(p = 1) != "1") return "fail 1" diff --git a/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt b/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt index 3182eec3a07..3cd78ff7515 100644 --- a/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt +++ b/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt @@ -12,8 +12,8 @@ fun main() { join(1, "2", "3") join(*1, "2") join(1, *"2") - join(x = 1, a = "2") - join(x = *1, a = *"2") + join(x = 1, a = "2") + join(x = *1, a = *"2") join(x = 1, a = a) join(x = 1, a = b) join(1, *a) @@ -33,8 +33,8 @@ fun main() { joinG(*1, "2") joinG(1, *"2") joinG(x = 1, a = a) - joinG(x = 1, a = "2") - 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") @@ -46,8 +46,8 @@ fun main() { joinG(*1, "2") joinG(1, *"2") joinG(x = 1, a = a) - joinG(x = 1, a = "2") - 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") diff --git a/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsInDifferentPositions.fir.kt b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsInDifferentPositions.fir.kt index 7a0759a1f57..ba34c23519c 100644 --- a/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsInDifferentPositions.fir.kt +++ b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsInDifferentPositions.fir.kt @@ -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 = overloadedFun("", args = "") +val test1b: X1 = overloadedFun("", args = "") val test1c: X2 = overloadedFun("", "", "", flag = true) diff --git a/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsMixed.fir.kt b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsMixed.fir.kt index f0b1ad0d89a..4b953415020 100644 --- a/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsMixed.fir.kt +++ b/compiler/testData/diagnostics/tests/resolve/overloadConflicts/varargsMixed.fir.kt @@ -9,5 +9,5 @@ fun overloadedFun5(s: String, vararg ss: String) = X2 val test1 = overloadedFun5("") val test2 = overloadedFun5("", "") -val test3: X2 = overloadedFun5(s = "", ss = "") -val test4: X1 = overloadedFun5(ss = "") +val test3: X2 = overloadedFun5(s = "", ss = "") +val test4: X1 = overloadedFun5(ss = "") diff --git a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt index 759bac05a60..56098cdc698 100644 --- a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt @@ -31,6 +31,6 @@ fun test_ann(s: String, arr: Array) { @Ann("", x = 1) foo() - @Ann(s = "", x = 1) + @Ann(s = "", x = 1) foo() } diff --git a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt index 585dfa8c7d9..971e060e747 100644 --- a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt @@ -31,6 +31,6 @@ fun test_ann(s: String, arr: Array) { @Ann("", x = 1) foo() - @Ann(s = "", x = 1) + @Ann(s = "", x = 1) foo() } diff --git a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_after.fir.kt b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_after.fir.kt index 1e3e7c74303..e9dd8453b09 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_after.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_after.fir.kt @@ -11,7 +11,7 @@ annotation class Ann(vararg val s: String) -@Ann(s = "value") +@Ann(s = "value") fun test1() {} @Ann(s = *arrayOf("value")) @@ -20,7 +20,7 @@ fun test2() {} @Ann(s = *["value"]) fun test3() {} -@JavaAnn(value = "value") +@JavaAnn(value = "value") fun test4() {} @JavaAnn("value", path = arrayOf("path")) diff --git a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_before.fir.kt b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_before.fir.kt index a79b81feb50..628c0b4dfb4 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_before.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormAnnDeprecation_before.fir.kt @@ -11,7 +11,7 @@ annotation class Ann(vararg val s: String) -@Ann(s = "value") +@Ann(s = "value") fun test1() {} @Ann(s = *arrayOf("value")) @@ -20,7 +20,7 @@ fun test2() {} @Ann(s = *["value"]) fun test3() {} -@JavaAnn(value = "value") +@JavaAnn(value = "value") fun test4() {} @JavaAnn("value", path = arrayOf("path")) diff --git a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt index 2d690688e04..1255027b784 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt @@ -7,27 +7,27 @@ fun foo(vararg s: Int) {} open class Cls(vararg p: Long) fun test(i: IntArray) { - foo(s = 1) + foo(s = 1) foo(s = i) foo(s = *i) foo(s = intArrayOf(1)) foo(s = *intArrayOf(1)) foo(1) - Cls(p = 1) + Cls(p = 1) - class Sub : Cls(p = 1) + class Sub : Cls(p = 1) - val c = object : Cls(p = 1) {} + val c = object : Cls(p = 1) {} - foo(s = *intArrayOf(elements = 1)) + foo(s = *intArrayOf(elements = 1)) } fun anyFoo(vararg a: Any) {} fun testAny() { - anyFoo(a = "") + anyFoo(a = "") anyFoo(a = arrayOf("")) anyFoo(a = *arrayOf("")) } @@ -35,12 +35,12 @@ fun testAny() { fun genFoo(vararg t: T) {} fun testGen() { - genFoo(t = 1) - genFoo(t = null) + genFoo(t = 1) + genFoo(t = null) genFoo>(t = arrayOf()) genFoo>(t = *arrayOf(arrayOf())) - 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) { - manyFoo(v = 1) - manyFoo(s = "") + manyFoo(v = 1) + manyFoo(s = "") manyFoo(a) manyFoo(v = a) diff --git a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt index f15cc442937..a2efef520e7 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt @@ -7,27 +7,27 @@ fun foo(vararg s: Int) {} open class Cls(vararg p: Long) fun test(i: IntArray) { - foo(s = 1) + foo(s = 1) foo(s = i) foo(s = *i) foo(s = intArrayOf(1)) foo(s = *intArrayOf(1)) foo(1) - Cls(p = 1) + Cls(p = 1) - class Sub : Cls(p = 1) + class Sub : Cls(p = 1) - val c = object : Cls(p = 1) {} + val c = object : Cls(p = 1) {} - foo(s = *intArrayOf(elements = 1)) + foo(s = *intArrayOf(elements = 1)) } fun anyFoo(vararg a: Any) {} fun testAny() { - anyFoo(a = "") + anyFoo(a = "") anyFoo(a = arrayOf("")) anyFoo(a = *arrayOf("")) } @@ -35,12 +35,12 @@ fun testAny() { fun genFoo(vararg t: T) {} fun testGen() { - genFoo(t = 1) - genFoo(t = null) + genFoo(t = 1) + genFoo(t = null) genFoo>(t = arrayOf()) genFoo>(t = *arrayOf(arrayOf())) - 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) { - manyFoo(v = 1) - manyFoo(s = "") + manyFoo(v = 1) + manyFoo(s = "") manyFoo(a) manyFoo(v = a) diff --git a/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt b/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt index cc3ec4cefa5..1a2627826f7 100644 --- a/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt @@ -43,7 +43,7 @@ fun foo2() {} fun foo(vararg i: Int) {} -@Ann(s = "value") +@Ann(s = "value") fun dep1() { - foo(i = 1) + foo(i = 1) } diff --git a/compiler/testData/diagnostics/tests/varargs/prohibitAssigningSingleElementsInNamedForm.fir.kt b/compiler/testData/diagnostics/tests/varargs/prohibitAssigningSingleElementsInNamedForm.fir.kt index 2b3e3fd2806..7a8a4abb089 100644 --- a/compiler/testData/diagnostics/tests/varargs/prohibitAssigningSingleElementsInNamedForm.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/prohibitAssigningSingleElementsInNamedForm.fir.kt @@ -4,7 +4,7 @@ annotation class Anno1(vararg val s: String) annotation class Anno2(vararg val i: Int) -@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() { - foo(ints = 1) + foo(ints = 1) foo(ints = *intArrayOf(1)) }