Disallow arrays as upper bounds of type parameters

#KT-9189 Fixed
This commit is contained in:
Alexander Udalov
2015-09-17 17:36:14 +03:00
parent e95be9096e
commit 57c81e9cbe
6 changed files with 83 additions and 3 deletions
@@ -0,0 +1,18 @@
fun <<!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<Any><!>> f1() {}
fun <T, <!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<out T><!>> f2() {}
fun <S, T : S, <!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<out S><!>> f3() where A : Array<out T> {}
fun <<!UPPER_BOUND_CANNOT_BE_ARRAY!>T : <!FINAL_UPPER_BOUND!>IntArray<!><!>> f4() {}
fun <<!UPPER_BOUND_CANNOT_BE_ARRAY!>T<!>> f5() where T : Array<Any> {}
val <<!UPPER_BOUND_CANNOT_BE_ARRAY!>T : Array<Any?><!>> v = ""
class C2<T, <!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<out T><!>>
interface C3<S, T : S, <!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<out S><!>> where A : Array<out T>
fun foo() {
class C1<<!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<Any><!>> {
fun <<!UPPER_BOUND_CANNOT_BE_ARRAY!>A : Array<Any><!>, <!UPPER_BOUND_CANNOT_BE_ARRAY!>B : Array<Any><!>, C : A> f() {}
}
}
@@ -0,0 +1,22 @@
package
public val </*0*/ T : kotlin.Array<kotlin.Any?>> v: kotlin.String = ""
public fun </*0*/ A : kotlin.Array<kotlin.Any>> f1(): kotlin.Unit
public fun </*0*/ T, /*1*/ A : kotlin.Array<out T>> f2(): kotlin.Unit
public fun </*0*/ S, /*1*/ T : S, /*2*/ A : kotlin.Array<out S>> f3(): kotlin.Unit where A : kotlin.Array<out T>
public fun </*0*/ T : kotlin.IntArray> f4(): kotlin.Unit
public fun </*0*/ T : kotlin.Array<kotlin.Any>> f5(): kotlin.Unit
public fun foo(): kotlin.Unit
public final class C2</*0*/ T, /*1*/ A : kotlin.Array<out T>> {
public constructor C2</*0*/ T, /*1*/ A : kotlin.Array<out T>>()
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
}
public interface C3</*0*/ S, /*1*/ T : S, /*2*/ A : kotlin.Array<out S>> where A : kotlin.Array<out T> {
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
}