KtLightElements: make light annotations lazier

Allow to get annotation list and to invoke `findAnnotation` without building delegate
Introduce KtLightNullabilityAnnotation which holds nullability information and is built
    before delegate is built
This commit is contained in:
Pavel V. Talanov
2017-04-24 17:37:58 +03:00
parent 03b68666e4
commit 0571c62943
25 changed files with 411 additions and 179 deletions
@@ -0,0 +1,10 @@
@kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE)
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.TYPE_PARAMETER})
@kotlin.annotation.MustBeDocumented
@kotlin.annotation.Repeatable
@java.lang.annotation.Documented
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)
@java.lang.annotation.Target({})
public @interface Anno {
int i();
}
@@ -0,0 +1,7 @@
// Anno
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.TYPE_PARAMETER)
@MustBeDocumented
@Repeatable
annotation class Anno(val i: Int)
@@ -0,0 +1,18 @@
public final class Annotations {
@p.R(s = "a")
@p.R(s = "b")
@p.R(s = "c")
public final void repeatables1() { /* compiled code */ }
@p.R(s = "a")
public final void repeatables2() { /* compiled code */ }
@p.R(s = "a")
@p.S(g = "b")
@p.R(s = "c")
@p.S(g = "D")
@p.R(s = "f")
public final void repeatables3() { /* compiled code */ }
public Annotations() { /* compiled code */ }
}
@@ -0,0 +1,30 @@
// p.Annotations
package p
class Annotations {
@R("a") @R("b") @R("c")
fun repeatables1() {
}
@R("a")
fun repeatables2() {
}
@R("a") @S("b") @R("c") @S("D") @R("f")
fun repeatables3() {
}
}
@Repeatable
@Retention(AnnotationRetention.SOURCE)
annotation class S(val g: String)
@Repeatable
@Retention(AnnotationRetention.SOURCE)
annotation class R(val s: String)