jet.Annotation
Create a supertype for all Kotlin annotations, jet.Annotation. Map java.lang.annotation.Annotation to jet.Annotation and vice versa. Add extension function "annotationType()" to every annotation, similar to java.lang.annotation.Annotation.annotationType() #KT-1620 Fixed
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package kotlin
|
||||
|
||||
import java.lang.reflect.Proxy
|
||||
|
||||
public fun <T : Annotation> T.annotationType() : Class<out T> {
|
||||
val invocationHandler = Proxy.getInvocationHandler(this)!!
|
||||
val method = this.javaClass.getMethod("annotationType")
|
||||
return invocationHandler.invoke(this, method, array<Object>())!! as Class<out T>
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package test.annotations
|
||||
|
||||
import kotlin.*
|
||||
import kotlin.test.assertTrue
|
||||
import org.junit.Test as test
|
||||
import java.lang.annotation.*
|
||||
|
||||
|
||||
Retention(RetentionPolicy.RUNTIME)
|
||||
annotation class MyAnno
|
||||
|
||||
MyAnno
|
||||
Deprecated
|
||||
class AnnotatedClass
|
||||
|
||||
|
||||
class AnnotationTest {
|
||||
test fun annotationType() {
|
||||
val annotations = javaClass<AnnotatedClass>().getAnnotations()!!
|
||||
|
||||
var foundMyAnno = false
|
||||
var foundDeprecated = false
|
||||
|
||||
for (annotation in annotations) {
|
||||
val clazz = annotation!!.annotationType()
|
||||
when {
|
||||
clazz == javaClass<MyAnno>() -> foundMyAnno = true
|
||||
clazz == javaClass<Deprecated>() -> foundDeprecated = true
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
assertTrue(foundMyAnno)
|
||||
assertTrue(foundDeprecated)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user