KT-9883 prohibit using spread operator for nullable value

#KT-9883 Fixed
This commit is contained in:
Michael Nedzelsky
2015-11-25 17:18:25 +03:00
parent 63fa71606f
commit 2fa34ae170
9 changed files with 122 additions and 0 deletions
@@ -0,0 +1,44 @@
// !DIAGNOSTICS:-UNUSED_PARAMETER
// KT-9883 prohibit using spread operator for nullable value
// FILE: A.java
public class A {
public void foo(int x, String ... args) {}
public static String[] ar;
}
// FILE: 1.kt
val args: Array<String>? = null
fun bar(x: Int, vararg s: String) {}
fun baz(s: String) {}
fun f() {
A().foo(1, <!SPREAD_OF_NULLABLE!>*<!>args)
bar(2, <!SPREAD_OF_NULLABLE!>*<!><!TYPE_MISMATCH!>args<!>)
baz(<!NON_VARARG_SPREAD, SPREAD_OF_NULLABLE!>*<!>args)
}
fun g(args: Array<String>?) {
if (args != null) {
A().foo(1, *<!DEBUG_INFO_SMARTCAST!>args<!>)
}
A().foo(1, *A.ar)
}
class B {
var args: Array<String>? = null
}
fun h(b: B) {
if (b.args != null) {
A().foo(1, <!SPREAD_OF_NULLABLE!>*<!><!SMARTCAST_IMPOSSIBLE!>b.args<!>)
}
}
@@ -0,0 +1,27 @@
package
public val args: kotlin.Array<kotlin.String>? = null
public fun bar(/*0*/ x: kotlin.Int, /*1*/ vararg s: kotlin.String /*kotlin.Array<out kotlin.String>*/): kotlin.Unit
public fun baz(/*0*/ s: kotlin.String): kotlin.Unit
public fun f(): kotlin.Unit
public fun g(/*0*/ args: kotlin.Array<kotlin.String>?): kotlin.Unit
public fun h(/*0*/ b: B): 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 fun foo(/*0*/ x: kotlin.Int, /*1*/ vararg args: kotlin.String! /*kotlin.Array<(out) kotlin.String!>!*/): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final var ar: kotlin.Array<(out) kotlin.String!>!
}
public final class B {
public constructor B()
public final var args: kotlin.Array<kotlin.String>?
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
}