diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/vararg.kt b/compiler/fir/analysis-tests/testData/resolve/arguments/vararg.kt index abc23b5c41b..066ecab17e1 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/vararg.kt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/vararg.kt @@ -12,7 +12,7 @@ fun test() { bar(1, z = true, y = *arrayOf("my", "yours")) - bar(0, z = false, y = "", y = "other") + bar(0, z = false, y = "", y = "other") bar(0, "", true) - bar(0, z = false, y = "", y = "other", y = "yet other") + bar(0, z = false, y = "", y = "other", y = "yet other") } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 1e56ffdfccc..317de4888af 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations import org.jetbrains.kotlin.fir.resolve.FirSamResolverImpl -import org.jetbrains.kotlin.fir.resolve.calls.getExpectedTypeForSAMConversion +import org.jetbrains.kotlin.fir.resolve.calls.getExpectedType import org.jetbrains.kotlin.fir.resolve.calls.isFunctional import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents @@ -729,7 +729,7 @@ class CallAndReferenceGenerator( return false } // If the expected type is a built-in functional type, we don't need SAM conversion. - val expectedType = argument.getExpectedTypeForSAMConversion(parameter) + val expectedType = argument.getExpectedType(parameter) if (expectedType is ConeTypeParameterType || expectedType.isBuiltinFunctionalType(session)) { return false } 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 4a77f7f4245..c51e30cd5eb 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 @@ -463,7 +463,7 @@ private fun Candidate.prepareExpectedType( context: ResolutionContext ): ConeKotlinType? { if (parameter == null) return null - val basicExpectedType = argument.getExpectedTypeForSAMConversion(parameter/*, LanguageVersionSettings*/) + val basicExpectedType = argument.getExpectedType(parameter/*, LanguageVersionSettings*/) val expectedType = getExpectedTypeWithSAMConversion(session, scopeSession, argument, basicExpectedType, context)?.also { @@ -570,16 +570,15 @@ fun FirExpression.isFunctional( } } -fun FirExpression.getExpectedTypeForSAMConversion( +fun FirExpression.getExpectedType( parameter: FirValueParameter/*, languageVersionSettings: LanguageVersionSettings*/ ): ConeKotlinType { val shouldUnwrapVarargType = when (this) { - is FirSpreadArgumentExpression -> !isSpread - is FirNamedArgumentExpression -> expression is FirConstExpression<*> - else -> true + is FirSpreadArgumentExpression, is FirNamedArgumentExpression -> false + else -> parameter.isVararg } - return if (parameter.isVararg && shouldUnwrapVarargType) { + return if (shouldUnwrapVarargType) { parameter.returnTypeRef.coneType.varargElementType() } else { parameter.returnTypeRef.coneType diff --git a/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt b/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt index bfd926cbe2c..9822d0e44a2 100644 --- a/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt +++ b/compiler/testData/codegen/box/annotations/singleAssignmentToVarargInAnnotation.kt @@ -1,3 +1,4 @@ +// IGNORE_BACKEND_FIR: JVM_IR // !LANGUAGE: -ProhibitAssigningSingleElementsToVarargsInNamedForm // TARGET_BACKEND: JVM diff --git a/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt b/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt index 0e5d2ede730..9702c142fec 100644 --- a/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt +++ b/compiler/testData/codegen/box/vararg/singleAssignmentToVarargsInFunction.kt @@ -1,3 +1,4 @@ +// IGNORE_BACKEND_FIR: JVM_IR // !LANGUAGE: -ProhibitAssigningSingleElementsToVarargsInNamedForm -AllowAssigningArrayElementsToVarargsInNamedFormForFunctions fun box(): String { diff --git a/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt b/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt index fc0f2033494..036a52f3311 100644 --- a/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt +++ b/compiler/testData/diagnostics/tests/checkArguments/SpreadVarargs.fir.kt @@ -11,8 +11,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) @@ -32,8 +32,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") @@ -45,8 +45,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 0abd0d74549..7a0759a1f57 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 0670b897250..e72dd034e0c 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 1f7b595fc64..fa77f09cb18 100644 --- a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_3.fir.kt @@ -30,6 +30,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 0d83adc756d..1306fc99699 100644 --- a/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assignArrayToVararagInNamedForm_1_4.fir.kt @@ -30,6 +30,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 3c255f49e0a..516602d3992 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 819fcc96de0..d1f27f1627e 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 e46b4cb2a32..8d2acd9c7b0 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_after.fir.kt @@ -6,27 +6,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("")) } @@ -34,12 +34,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("")) } @@ -48,8 +48,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 5da1ffdf4b1..73db5c6c769 100644 --- a/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/assigningSingleElementsInNamedFormFunDeprecation_before.fir.kt @@ -6,27 +6,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("")) } @@ -34,12 +34,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("")) } @@ -48,8 +48,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 cdf7a12dd5a..9878ff53049 100644 --- a/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt +++ b/compiler/testData/diagnostics/tests/varargs/noAssigningArraysToVarargsFeature.fir.kt @@ -42,7 +42,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 8b03955bb68..dcd2547a208 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() {} @@ -12,13 +12,13 @@ fun f1() {} @Anno2(i = intArrayOf(1)) fun f2() {} -@Anno1(s = arrayOf(elements = "foo")) +@Anno1(s = arrayOf(elements = "foo")) @Anno2(i = intArrayOf(elements = *intArrayOf(1))) fun f3() {} fun foo(vararg ints: Int) {} fun test() { - foo(ints = 1) + foo(ints = 1) foo(ints = *intArrayOf(1)) }