Allow assigning array to vararg in named form in annotations
See more in KT-20171
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// LANGUAGE_VERSION: 1.2
|
||||
// WITH_REFLECT
|
||||
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND: NATIVE
|
||||
|
||||
// FILE: JavaAnn.java
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@interface JavaAnn {
|
||||
String[] value() default {};
|
||||
String[] path() default {};
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
import java.util.Arrays
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KFunction0
|
||||
import kotlin.reflect.full.findAnnotation
|
||||
|
||||
inline fun <reified T : Annotation> test(kFunction: KFunction0<Unit>, test: T.() -> Unit) {
|
||||
val annotation = kFunction.findAnnotation<T>()!!
|
||||
annotation.test()
|
||||
}
|
||||
|
||||
fun check(b: Boolean, message: String) {
|
||||
if (!b) throw RuntimeException(message)
|
||||
}
|
||||
|
||||
annotation class Ann(vararg val s: String)
|
||||
|
||||
@Ann(s = ["value1", "value2"])
|
||||
fun test1() {}
|
||||
|
||||
@Ann(s = arrayOf("value3", "value4"))
|
||||
fun test2() {}
|
||||
|
||||
@JavaAnn(value = ["value5"], path = ["value6"])
|
||||
fun test3() {}
|
||||
|
||||
@JavaAnn("value7", path = ["value8"])
|
||||
fun test4() {}
|
||||
|
||||
fun box(): String {
|
||||
test<Ann>(::test1) {
|
||||
check(s.contentEquals(arrayOf("value1", "value2")), "Fail 1: ${s.joinToString()}")
|
||||
}
|
||||
|
||||
test<Ann>(::test2) {
|
||||
check(s.contentEquals(arrayOf("value3", "value4")), "Fail 2: ${s.joinToString()}")
|
||||
}
|
||||
|
||||
test<JavaAnn>(::test3) {
|
||||
check(value.contentEquals(arrayOf("value5")), "Fail 3: ${value.joinToString()}")
|
||||
check(path.contentEquals(arrayOf("value6")), "Fail 3: ${path.joinToString()}")
|
||||
}
|
||||
|
||||
test<JavaAnn>(::test4) {
|
||||
check(value.contentEquals(arrayOf("value7")), "Fail 4: ${value.joinToString()}")
|
||||
check(path.contentEquals(arrayOf("value8")), "Fail 4: ${path.joinToString()}")
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+45
@@ -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() {}
|
||||
+37
@@ -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
|
||||
}
|
||||
+48
@@ -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)
|
||||
}
|
||||
+38
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user