Made vararg parameters have Array<out T> type

instead of simply Array<T>
  #KT-1638 Fixed
  #KT-2163 Fixed
  #KT-3213 Fixed
  #KT-4172 Fixed
  #KT-5534 Fixed
This commit is contained in:
Svetlana Isakova
2014-12-09 14:11:11 +03:00
parent d893e8283e
commit 5b4f10e698
42 changed files with 266 additions and 65 deletions
@@ -10,7 +10,7 @@ fun fool(vararg a : Long) : LongArray = a
fun food(vararg a : Double) : DoubleArray = a
fun foof(vararg a : Float) : FloatArray = a
fun foob(vararg a : Boolean) : BooleanArray = a
fun foos(vararg a : String) : Array<String> = a
fun foos(vararg a : String) : Array<out String> = a
fun test() {
Arrays.asList(1, 2, 3)
@@ -25,7 +25,7 @@ fun foo() {
// ---------------------
// copy from kotlin util
fun <T> array(vararg t : T) : Array<T> = t
fun <T> array(vararg t : T) : Array<T> = t as Array<T>
fun <T, R> Array<T>.map(<!UNUSED_PARAMETER!>transform<!> : (T) -> R) : List<R> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
@@ -11,4 +11,4 @@ fun main(args: Array<String>) {
}
//from library
fun <T> array(vararg t : T) : Array<T> = t
fun <T> array(vararg t : T) : Array<T> = t as Array<T>
@@ -13,4 +13,4 @@ public fun test()
//--------------------
fun <T> array(vararg t : T) : Array<T> = t
fun <T> array(vararg t : T) : Array<T> = t as Array<T>
@@ -0,0 +1,7 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun printAll(vararg a : Any) {}
fun main(args: Array<String>) {
printAll(*args) // Shouldn't be an error
}
@@ -0,0 +1,4 @@
package
internal fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
internal fun printAll(/*0*/ vararg a: kotlin.Any /*kotlin.Array<out kotlin.Any>*/): kotlin.Unit
@@ -0,0 +1,13 @@
// !CHECK_TYPE
fun test(vararg a: String) {
a checkType { it : _<Array<out String>> }
foo(a) checkType { it : _<Array<out String>> }
}
fun <T> test1(vararg t: T) {
t checkType { it : _<Array<out T>> }
}
fun <T> foo(a: Array<T>): Array<T> = a
@@ -0,0 +1,5 @@
package
internal fun </*0*/ T> foo(/*0*/ a: kotlin.Array<T>): kotlin.Array<T>
internal fun test(/*0*/ vararg a: kotlin.String /*kotlin.Array<out kotlin.String>*/): kotlin.Unit
internal fun </*0*/ T> test1(/*0*/ vararg t: T /*kotlin.Array<out T>*/): kotlin.Unit
@@ -0,0 +1,9 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun bar(vararg a: String) {}
fun test2(a: Array<String>, b: Array<out String>) {
bar(*a)
bar(*b)
bar("", *a, *b, "")
}
@@ -0,0 +1,4 @@
package
internal fun bar(/*0*/ vararg a: kotlin.String /*kotlin.Array<out kotlin.String>*/): kotlin.Unit
internal fun test2(/*0*/ a: kotlin.Array<kotlin.String>, /*1*/ b: kotlin.Array<out kotlin.String>): kotlin.Unit
@@ -15,7 +15,7 @@ fun foo(): Int = 1
annotation class AnnJC(val i: Array<Class<*>>)
AnnJC(array(javaClass<Test>()))
AnnJC(array(iJC))
AnnJC(array(<!ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL!>iJC<!>))
class TestJC
val iJC = javaClass<Test>()
@@ -18,7 +18,7 @@ fun foo(): Int = 1
annotation class AnnJC(vararg val i: Class<*>)
AnnJC(*array(javaClass<Test>()))
AnnJC(*array(iJC))
AnnJC(*array(<!ANNOTATION_PARAMETER_MUST_BE_CLASS_LITERAL!>iJC<!>))
class TestJC
val iJC = javaClass<Test>()
@@ -0,0 +1,7 @@
// !CHECK_TYPE
fun test(a: Array<out String>) {
val b = a.toList()
b checkType { it : _<List<String>> }
}
@@ -0,0 +1,3 @@
package
internal fun test(/*0*/ a: kotlin.Array<out kotlin.String>): kotlin.Unit
@@ -0,0 +1,9 @@
// FILE: A.java
public class A {
public static void main(String[] args) {}
}
// FILE: 1.kt
fun main(args: Array<String>) {
A.main(array())
}
@@ -0,0 +1,13 @@
package
internal fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public open class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public open fun main(/*0*/ args: kotlin.Array<(out) kotlin.String!>!): kotlin.Unit
}
@@ -0,0 +1,6 @@
fun test() {
val p: Array<String> = array("a")
foo(*p)
}
fun foo(vararg a: String?) = a
@@ -0,0 +1,4 @@
package
internal fun foo(/*0*/ vararg a: kotlin.String? /*kotlin.Array<out kotlin.String?>*/): kotlin.Array<out kotlin.String?>
internal fun test(): kotlin.Unit