Introduce warning for the changing arguments execution order for named varargs (KT-17691)
This commit is contained in:
@@ -25,9 +25,9 @@ fun main() {
|
||||
join(1, "4", *a)
|
||||
join(1, "4", *a, *a, "3")
|
||||
join(1, "4", *a, *<!TYPE_MISMATCH!>b<!>, "3")
|
||||
join(a = a, x = 1)
|
||||
join(a = <!TYPE_MISMATCH!>b<!>, x = 1)
|
||||
join(a = a, x = 1)
|
||||
join(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = a<!>, x = 1)
|
||||
join(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = <!TYPE_MISMATCH!>b<!><!>, x = 1)
|
||||
join(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = a<!>, x = 1)
|
||||
|
||||
joinG<String>(1, "2")
|
||||
joinG<String>(<!NON_VARARG_SPREAD!>*<!>1, "2")
|
||||
@@ -40,7 +40,7 @@ fun main() {
|
||||
joinG<String>(1, "4", *a, "3")
|
||||
joinG<String>(1, "4", *a)
|
||||
joinG<String>(1, "4", *a, *a, "3")
|
||||
joinG<String>(a = a, x = 1)
|
||||
joinG<String>(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = a<!>, x = 1)
|
||||
|
||||
joinG(1, "2")
|
||||
joinG(<!NON_VARARG_SPREAD!>*<!>1, "2")
|
||||
@@ -53,7 +53,7 @@ fun main() {
|
||||
joinG(1, "4", *a, "3")
|
||||
joinG(1, "4", *a)
|
||||
joinG(1, "4", *a, *a, "3")
|
||||
joinG(a = a, x = 1)
|
||||
joinG(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = a<!>, x = 1)
|
||||
|
||||
val x1 = joinT(1, "2")
|
||||
checkSubtype<String?>(x1)
|
||||
@@ -69,7 +69,7 @@ fun main() {
|
||||
checkSubtype<String?>(x9)
|
||||
val x10 = joinT(1, "4", *a, *a, "3")
|
||||
checkSubtype<String?>(x10)
|
||||
val x11 = joinT(a = a, x = 1)
|
||||
val x11 = joinT(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>a = a<!>, x = 1)
|
||||
checkSubtype<String?>(x11)
|
||||
val x12 = joinT(x = 1, a = a)
|
||||
checkSubtype<String?>(x12)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !LANGUAGE: -UseCorrectExecutionOrderForVarargArguments
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun foo(vararg x: Unit, y: Any) {}
|
||||
|
||||
fun main() {
|
||||
foo({ }(), y = { }())
|
||||
foo(x = *arrayOf({ }()), y = { }())
|
||||
foo(x = arrayOf({ }()), y = { }())
|
||||
foo(*arrayOf({ }()), y = { }())
|
||||
}
|
||||
|
||||
fun foo2(vararg x: Unit, y: Any, z: Any) {}
|
||||
|
||||
fun main2() {
|
||||
foo2(y = { }(), x = arrayOf({ }()), z = { }())
|
||||
}
|
||||
|
||||
fun foo3(vararg x: Unit, y: Any, z: Any = { }()) {}
|
||||
|
||||
fun main3() {
|
||||
// no warning, execution order is already right
|
||||
foo3(y = { }(), x = arrayOf({ }()))
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !LANGUAGE: -UseCorrectExecutionOrderForVarargArguments
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun foo(vararg x: Unit, y: Any) {}
|
||||
|
||||
fun main() {
|
||||
foo({ }(), y = { }())
|
||||
foo(<!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>x = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_FUNCTION!>arrayOf({ }())<!><!>, y = { }())
|
||||
foo(<!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>x = arrayOf({ }())<!>, y = { }())
|
||||
foo(*arrayOf({ }()), y = { }())
|
||||
}
|
||||
|
||||
fun foo2(vararg x: Unit, y: Any, z: Any) {}
|
||||
|
||||
fun main2() {
|
||||
foo2(y = { }(), <!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>x = arrayOf({ }())<!>, z = { }())
|
||||
}
|
||||
|
||||
fun foo3(vararg x: Unit, y: Any, z: Any = { }()) {}
|
||||
|
||||
fun main3() {
|
||||
// no warning, execution order is already right
|
||||
foo3(y = { }(), x = arrayOf({ }()))
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public fun foo(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any): kotlin.Unit
|
||||
public fun foo2(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any, /*2*/ z: kotlin.Any): kotlin.Unit
|
||||
public fun foo3(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any, /*2*/ z: kotlin.Any = ...): kotlin.Unit
|
||||
public fun main(): kotlin.Unit
|
||||
public fun main2(): kotlin.Unit
|
||||
public fun main3(): kotlin.Unit
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !LANGUAGE: +UseCorrectExecutionOrderForVarargArguments
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun foo(vararg x: Unit, y: Any) {}
|
||||
|
||||
fun main() {
|
||||
foo({ }(), y = { }())
|
||||
foo(x = *arrayOf({ }()), y = { }())
|
||||
foo(x = arrayOf({ }()), y = { }())
|
||||
foo(*arrayOf({ }()), y = { }())
|
||||
}
|
||||
|
||||
fun foo2(vararg x: Unit, y: Any, z: Any) {}
|
||||
|
||||
fun main2() {
|
||||
foo2(y = { }(), x = arrayOf({ }()), z = { }())
|
||||
}
|
||||
|
||||
fun foo3(vararg x: Unit, y: Any, z: Any = { }()) {}
|
||||
|
||||
fun main3() {
|
||||
// no warning, execution order is already right
|
||||
foo3(y = { }(), x = arrayOf({ }()))
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !LANGUAGE: +UseCorrectExecutionOrderForVarargArguments
|
||||
// WITH_RUNTIME
|
||||
|
||||
fun foo(vararg x: Unit, y: Any) {}
|
||||
|
||||
fun main() {
|
||||
foo({ }(), y = { }())
|
||||
foo(x = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_FUNCTION!>arrayOf({ }())<!>, y = { }())
|
||||
foo(x = arrayOf({ }()), y = { }())
|
||||
foo(*arrayOf({ }()), y = { }())
|
||||
}
|
||||
|
||||
fun foo2(vararg x: Unit, y: Any, z: Any) {}
|
||||
|
||||
fun main2() {
|
||||
foo2(y = { }(), x = arrayOf({ }()), z = { }())
|
||||
}
|
||||
|
||||
fun foo3(vararg x: Unit, y: Any, z: Any = { }()) {}
|
||||
|
||||
fun main3() {
|
||||
// no warning, execution order is already right
|
||||
foo3(y = { }(), x = arrayOf({ }()))
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public fun foo(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any): kotlin.Unit
|
||||
public fun foo2(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any, /*2*/ z: kotlin.Any): kotlin.Unit
|
||||
public fun foo3(/*0*/ vararg x: kotlin.Unit /*kotlin.Array<out kotlin.Unit>*/, /*1*/ y: kotlin.Any, /*2*/ z: kotlin.Any = ...): kotlin.Unit
|
||||
public fun main(): kotlin.Unit
|
||||
public fun main2(): kotlin.Unit
|
||||
public fun main3(): kotlin.Unit
|
||||
+4
-4
@@ -29,12 +29,12 @@ fun foo4(
|
||||
|
||||
fun main() {
|
||||
foo1(1, 2, p2 = "3", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>4.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo1(p1 = intArrayOf(1, 2), "3", p3 = 4.0)
|
||||
foo1(<!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>p1 = intArrayOf(1, 2)<!>, "3", p3 = 4.0)
|
||||
|
||||
foo1(p2 = "3", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>4.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
|
||||
foo2(p1 = 1, "2", "3", p3 = 4.0)
|
||||
foo2(1, p2 = arrayOf("2", "3"), 4.0)
|
||||
foo2(1, <!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>p2 = arrayOf("2", "3")<!>, 4.0)
|
||||
foo2(1, p3 = 3.0)
|
||||
|
||||
foo3(p1 = 1, "2", 3.0, 4.0)
|
||||
@@ -52,6 +52,6 @@ fun main() {
|
||||
foo2(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>*arrayOf("3", "4")<!>)
|
||||
foo2(1, p3 = 2.0, p2 = arrayOf("3", "4"))
|
||||
|
||||
foo3(1, p3 = doubleArrayOf(2.0, 3.0), <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"4"<!><!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo3(1, p3 = doubleArrayOf(2.0, 3.0), p2 = "4")
|
||||
foo3(1, <!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>p3 = doubleArrayOf(2.0, 3.0)<!>, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"4"<!><!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
foo3(1, <!CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>p3 = doubleArrayOf(2.0, 3.0)<!>, p2 = "4")
|
||||
}
|
||||
|
||||
+3
-3
@@ -24,13 +24,13 @@ fun test_ann(s: String, arr: Array<String>) {
|
||||
foo()
|
||||
@Ann(*[""], x = 1)
|
||||
foo()
|
||||
@Ann(s = [""], x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = [""]<!>, x = 1)
|
||||
foo()
|
||||
@Ann(s = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_ANNOTATION!>[""]<!>, x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_ANNOTATION!>[""]<!><!>, x = 1)
|
||||
foo()
|
||||
|
||||
@Ann("", x = 1)
|
||||
foo()
|
||||
@Ann(s = <!ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_ANNOTATION_ERROR, NI;TYPE_MISMATCH!>""<!>, x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = <!ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_ANNOTATION_ERROR, NI;TYPE_MISMATCH!>""<!><!>, x = 1)
|
||||
foo()
|
||||
}
|
||||
+3
-3
@@ -24,13 +24,13 @@ fun test_ann(s: String, arr: Array<String>) {
|
||||
foo()
|
||||
@Ann(*[""], x = 1)
|
||||
foo()
|
||||
@Ann(s = [""], x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = [""]<!>, x = 1)
|
||||
foo()
|
||||
@Ann(s = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_ANNOTATION!>[""]<!>, x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = *<!REDUNDANT_SPREAD_OPERATOR_IN_NAMED_FORM_IN_ANNOTATION!>[""]<!><!>, x = 1)
|
||||
foo()
|
||||
|
||||
@Ann("", x = 1)
|
||||
foo()
|
||||
@Ann(s = <!ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_ANNOTATION_ERROR, NI;TYPE_MISMATCH!>""<!>, x = 1)
|
||||
@Ann(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>s = <!ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_ANNOTATION_ERROR, NI;TYPE_MISMATCH!>""<!><!>, x = 1)
|
||||
foo()
|
||||
}
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ fun jTest1() {}
|
||||
@JavaAnn(value = ["value"])
|
||||
fun jTest2() {}
|
||||
|
||||
@JavaAnn(value = ["value"], path = ["path"])
|
||||
@JavaAnn(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>value = ["value"]<!>, path = ["path"])
|
||||
fun jTest3() {}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ fun jTest1() {}
|
||||
@JavaAnn(value = <!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!>)
|
||||
fun jTest2() {}
|
||||
|
||||
@JavaAnn(value = <!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!>, path = ["path"])
|
||||
@JavaAnn(<!NI;CHANGING_ARGUMENTS_EXECUTION_ORDER_FOR_NAMED_VARARGS!>value = <!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!><!>, path = ["path"])
|
||||
fun jTest3() {}
|
||||
|
||||
annotation class IntAnn(vararg val i: Int)
|
||||
|
||||
Reference in New Issue
Block a user