Named vararg arguments: don't allow to use array without spread, allow to use one value of vararg type
#KT-3802 Fixed
This commit is contained in:
@@ -931,16 +931,12 @@ public class CandidateResolver {
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (argument.isNamed()) {
|
||||
return parameterDescriptor.getType();
|
||||
}
|
||||
else {
|
||||
JetType varargElementType = parameterDescriptor.getVarargElementType();
|
||||
if (varargElementType == null) {
|
||||
return parameterDescriptor.getType();
|
||||
}
|
||||
JetType varargElementType = parameterDescriptor.getVarargElementType();
|
||||
if (varargElementType != null) {
|
||||
return varargElementType;
|
||||
}
|
||||
|
||||
return parameterDescriptor.getType();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
fun box(): String {
|
||||
if (test1() != "") return "fail 1"
|
||||
if (test1(1) != "1") return "fail 2"
|
||||
if (test1(1, 2) != "12") return "fail 3"
|
||||
|
||||
if (test1(*intArray()) != "") return "fail 4"
|
||||
if (test1(*intArray(1)) != "1") return "fail 5"
|
||||
if (test1(*intArray(1, 2)) != "12") return "fail 6"
|
||||
|
||||
if (test1(p = 1) != "1") return "fail 7"
|
||||
|
||||
if (test1(p = *intArray()) != "") return "fail 8"
|
||||
if (test1(p = *intArray(1)) != "1") return "fail 9"
|
||||
if (test1(p = *intArray(1, 2)) != "12") return "fail 10"
|
||||
|
||||
if (test2() != "") return "fail 11"
|
||||
if (test2("1") != "1") return "fail 12"
|
||||
if (test2("1", "2") != "12") return "fail 13"
|
||||
|
||||
if (test2(*array<String>()) != "") return "fail 14"
|
||||
if (test2(*array<String>("1")) != "1") return "fail 15"
|
||||
if (test2(*array<String>("1", "2")) != "12") return "fail 16"
|
||||
|
||||
if (test2(p = "1") != "1") return "fail 17"
|
||||
|
||||
if (test2(p = *array<String>()) != "") return "fail 18"
|
||||
if (test2(p = *array<String>("1")) != "1") return "fail 19"
|
||||
if (test2(p = *array<String>("1", "2")) != "12") return "fail 20"
|
||||
|
||||
if (test3<String>() != "") return "fail 21"
|
||||
if (test3("1") != "1") return "fail 22"
|
||||
if (test3("1", "2") != "12") return "fail 23"
|
||||
|
||||
if (test3(*array<String>()) != "") return "fail 24"
|
||||
if (test3(*array<String>("1")) != "1") return "fail 25"
|
||||
if (test3(*array<String>("1", "2")) != "12") return "fail 26"
|
||||
|
||||
if (test3(p = "1") != "1") return "fail 27"
|
||||
|
||||
if (test3(p = *array<String>()) != "") return "fail 28"
|
||||
if (test3(p = *array<String>("1")) != "1") return "fail 29"
|
||||
if (test3(p = *array<String>("1", "2")) != "12") return "fail 30"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun test1(vararg p: Int): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun test2(vararg p: String): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun <T> test3(vararg p: T): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -8,7 +8,7 @@ fun main(args : Array<String>) {
|
||||
join(1, "2", "3")
|
||||
join(<!NON_VARARG_SPREAD!>*<!>1, "2")
|
||||
join(1, *<!TYPE_MISMATCH!>"2"<!>)
|
||||
join(x = 1, a = <!TYPE_MISMATCH!>"2"<!>)
|
||||
join(x = 1, a = "2")
|
||||
join(x = <!NON_VARARG_SPREAD!>*<!>1, a = *<!TYPE_MISMATCH!>"2"<!>)
|
||||
join(x = 1, a = *a)
|
||||
join(x = 1, a = *<!TYPE_MISMATCH!>b<!>)
|
||||
@@ -23,12 +23,13 @@ fun main(args : Array<String>) {
|
||||
join(1, "4", *a, *<!TYPE_MISMATCH!>b<!>, "3")
|
||||
join(a = *a, x = 1)
|
||||
join(a = *<!TYPE_MISMATCH!>b<!>, x = 1)
|
||||
join(a = <!TYPE_MISMATCH!>a<!>, x = 1)
|
||||
|
||||
joinG<String>(1, "2")
|
||||
joinG<String>(<!NON_VARARG_SPREAD!>*<!>1, "2")
|
||||
joinG<String>(1, *<!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG<String>(x = 1, a = *a)
|
||||
joinG<String>(x = 1, a = <!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG<String>(x = 1, a = "2")
|
||||
joinG<String>(x = <!NON_VARARG_SPREAD!>*<!>1, a = *<!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG<String>(1, *a)
|
||||
joinG<String>(1, *a, "3")
|
||||
@@ -41,7 +42,7 @@ fun main(args : Array<String>) {
|
||||
joinG(<!NON_VARARG_SPREAD!>*<!>1, "2")
|
||||
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>joinG<!>(1, *<!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG(x = 1, a = *a)
|
||||
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>joinG<!>(x = 1, a = <!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG(x = 1, a = "2")
|
||||
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>joinG<!>(x = <!NON_VARARG_SPREAD!>*<!>1, a = *<!TYPE_MISMATCH!>"2"<!>)
|
||||
joinG(1, *a)
|
||||
joinG(1, *a, "3")
|
||||
|
||||
Reference in New Issue
Block a user