Type Annotations clarification
Werner Dietl
wdietl at gmail.com
Fri Mar 7 17:50:25 UTC 2014
Hi Eric,
it would help make the discussions concrete, if you sent complete
programs that each of us can test.
I've extended your example to:
===
import java.lang.annotation.*;
class Outer {
class Inner {}
}
class Use {
@A Outer. @B Inner @C [] @D [] f;
}
@Target(ElementType.TYPE_USE)
@interface A { };
@Target(ElementType.TYPE_USE)
@interface B { };
@Target(ElementType.TYPE_USE)
@interface C { };
@Target(ElementType.TYPE_USE)
@interface D { };
===
I get the following type annotations for field f, where #10 is C, #11
is D, #12 is B, and #13 is A:
RuntimeInvisibleTypeAnnotations:
0: #10(): FIELD
1: #11(): FIELD, location=[ARRAY]
2: #12(): FIELD, location=[ARRAY, ARRAY, INNER_TYPE]
3: #13(): FIELD, location=[ARRAY, ARRAY]
This seems correct to me:
- @A is on Outer, so no INNER_TYPE is required. It is on the component
type of a two-dimensional array, so two ARRAY are correct.
- @B is on Inner, so it additionally takes one INNER_TYPE.
- @C is on the outermost-array type, so no location is called for.
- @D is on the second array dimension, so one ARRAY location is needed.
Note that the array component type is "Outer.Inner". The array types
are not nested and do not need an INNER_TYPE.
Why do you say that @A should have an INNER_TYPE?
cu, WMD.
On Fri, Mar 7, 2014 at 12:35 PM, Eric McCorkle <eric.mccorkle at oracle.com> wrote:
> Hello,
>
> I need clarification for a specific case:
>
> class Outer {
> class Inner {}
> }
>
> And a type use of:
>
> @A Outer.Inner @B [] @C []
>
> The type path for @A is clearly [ARRAY, ARRAY, INNER_TYPE]
>
> However, should the type path for @B and @C contain an INNER_TYPE as well?
--
http://www.google.com/profiles/wdietl
More information about the compiler-dev
mailing list