Annotation cycles (was: repeating annotations)
Jesse Glick
jesse.glick at oracle.com
Tue Apr 17 05:59:13 PDT 2012
On 03/11/2012 06:19 PM, Joe Darcy wrote:
> two annotation types cannot be containers for each other because that would create an illegal cyclic annotation type situation
So long as you are changing the language spec for annotations, why not fix this longstanding irritation too (#6264216), which arbitrarily prevents a rather wide range of
use cases for annotations? For example, move the cycle check from declaration time to use time, so that the only rejected constructs would be genuinely nonterminating
cycles that no one would ever intentionally write:
@interface A {
B[] bs() default {@B};
}
@interface B {
A as() default {@A};
}
@A class X {} // oops
but so that legitimate cases compile:
@interface A {
B[] bs() default {};
}
@interface B {
A[] as() default {};
}
@A(@B(@A)) class X {} // fine
More information about the compiler-dev
mailing list