Allow assigning array to vararg in named form in annotations

See more in KT-20171
This commit is contained in:
Mikhail Zarechenskiy
2017-09-13 16:05:46 +03:00
parent f905d56b38
commit 68259f7939
26 changed files with 410 additions and 96 deletions
@@ -0,0 +1,45 @@
// !LANGUAGE: +ArrayLiteralsInAnnotations, +AssigningArraysToVarargsInNamedFormInAnnotations
// FILE: JavaAnn.java
@interface JavaAnn {
String[] value() default {};
String[] path() default {};
}
// FILE: test.kt
annotation class Ann(vararg val s: String)
@Ann(s = arrayOf())
fun test1() {}
@Ann(s = <!TYPE_MISMATCH!>intArrayOf()<!>)
fun test2() {}
@Ann(s = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf(1)<!>)
fun test3() {}
@Ann("value1", "value2")
fun test4() {}
@Ann(s = ["value"])
fun test5() {}
@JavaAnn(value = arrayOf("value"))
fun jTest1() {}
@JavaAnn(value = ["value"])
fun jTest2() {}
@JavaAnn(value = ["value"], path = ["path"])
fun jTest3() {}
annotation class IntAnn(vararg val i: Int)
@IntAnn(i = [1, 2])
fun foo1() {}
@IntAnn(i = intArrayOf(0))
fun foo2() {}
@@ -0,0 +1,37 @@
package
@IntAnn(i = {1, 2}) public fun foo1(): kotlin.Unit
@IntAnn(i = {0}) public fun foo2(): kotlin.Unit
@JavaAnn(value = {"value"}) public fun jTest1(): kotlin.Unit
@JavaAnn(value = {"value"}) public fun jTest2(): kotlin.Unit
@JavaAnn(path = {"path"}, value = {"value"}) public fun jTest3(): kotlin.Unit
@Ann(s = {}) public fun test1(): kotlin.Unit
@Ann(s = {}) public fun test2(): kotlin.Unit
@Ann(s = {1}) public fun test3(): kotlin.Unit
@Ann(s = {"value1", "value2"}) public fun test4(): kotlin.Unit
@Ann(s = {"value"}) public fun test5(): kotlin.Unit
public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ vararg s: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val s: kotlin.Array<out 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
}
public final annotation class IntAnn : kotlin.Annotation {
public constructor IntAnn(/*0*/ vararg i: kotlin.Int /*kotlin.IntArray*/)
public final val i: kotlin.IntArray
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/*package*/ final annotation class JavaAnn : kotlin.Annotation {
public/*package*/ constructor JavaAnn(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/ = ..., /*1*/ path: kotlin.Array<kotlin.String> = ...)
public final val path: kotlin.Array<kotlin.String>
public final val value: 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
}
@@ -0,0 +1,48 @@
// !LANGUAGE: +ArrayLiteralsInAnnotations, -AssigningArraysToVarargsInNamedFormInAnnotations
// FILE: JavaAnn.java
@interface JavaAnn {
String[] value() default {};
String[] path() default {};
}
// FILE: test.kt
annotation class Ann(vararg val s: String)
@Ann(s = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf()<!>)
fun test1() {}
@Ann(s = <!TYPE_MISMATCH!>intArrayOf()<!>)
fun test2() {}
@Ann(s = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf(1)<!>)
fun test3() {}
@Ann(s = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!>)
fun test5() {}
@JavaAnn(value = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf("value")<!>)
fun jTest1() {}
@JavaAnn(value = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!>)
fun jTest2() {}
@JavaAnn(value = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>["value"]<!>, path = ["path"])
fun jTest3() {}
annotation class IntAnn(vararg val i: Int)
@IntAnn(i = <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>[1, 2]<!>)
fun foo1() {}
@IntAnn(i = <!TYPE_MISMATCH!>intArrayOf(0)<!>)
fun foo2() {}
fun foo(vararg <!UNUSED_PARAMETER!>i<!>: Int) {}
@Ann(s = "value")
fun dep1() {
foo(i = 1)
}
@@ -0,0 +1,38 @@
package
@Ann(s = {"value"}) public fun dep1(): kotlin.Unit
public fun foo(/*0*/ vararg i: kotlin.Int /*kotlin.IntArray*/): kotlin.Unit
@IntAnn(i = {1, 2}) public fun foo1(): kotlin.Unit
@IntAnn(i = {0}) public fun foo2(): kotlin.Unit
@JavaAnn(value = {"value"}) public fun jTest1(): kotlin.Unit
@JavaAnn(value = {"value"}) public fun jTest2(): kotlin.Unit
@JavaAnn(path = {"path"}, value = {"value"}) public fun jTest3(): kotlin.Unit
@Ann(s = {}) public fun test1(): kotlin.Unit
@Ann(s = {}) public fun test2(): kotlin.Unit
@Ann(s = {1}) public fun test3(): kotlin.Unit
@Ann(s = {"value"}) public fun test5(): kotlin.Unit
public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ vararg s: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val s: kotlin.Array<out 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
}
public final annotation class IntAnn : kotlin.Annotation {
public constructor IntAnn(/*0*/ vararg i: kotlin.Int /*kotlin.IntArray*/)
public final val i: kotlin.IntArray
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/*package*/ final annotation class JavaAnn : kotlin.Annotation {
public/*package*/ constructor JavaAnn(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/ = ..., /*1*/ path: kotlin.Array<kotlin.String> = ...)
public final val path: kotlin.Array<kotlin.String>
public final val value: 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
}