Map annotation target TYPE -> TYPE_USE if JVM target >= 1.8

And TYPE_PARAMETER -> TYPE_PARAMETER similarly

 #KT-23857 Fixed
This commit is contained in:
Alexander Udalov
2018-04-25 15:48:13 +02:00
parent b7808ba24d
commit 1c2a9e4b21
9 changed files with 138 additions and 15 deletions
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FULL_JDK
// JVM_TARGET: 1.8
// FILE: A.java
import java.util.List;
public class A<@Anno(1) T> {}
// FILE: Anno.kt
import kotlin.test.assertEquals
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class Anno(val value: Int = 0)
fun box(): String {
val typeParameter = A::class.java.typeParameters.single()
assertEquals("[@Anno(value=1)]", typeParameter.annotations.toList().toString())
return "OK"
}
@@ -0,0 +1,30 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FULL_JDK
// JVM_TARGET: 1.8
// FILE: A.java
import java.util.List;
public class A {
public static @Anno(1) String test(List<@Anno(2) String> list) {
return list.get(0);
}
}
// FILE: Anno.kt
import java.lang.reflect.AnnotatedParameterizedType
import kotlin.test.assertEquals
@Target(AnnotationTarget.TYPE)
annotation class Anno(val value: Int = 0)
fun box(): String {
val method = A::class.java.declaredMethods.single()
assertEquals("[@Anno(value=1)]", method.annotatedReturnType.annotations.toList().toString())
val parameterType = method.parameters.single().annotatedType as AnnotatedParameterizedType
assertEquals("[@Anno(value=2)]", parameterType.annotatedActualTypeArguments.single().annotations.toList().toString())
return "OK"
}