Rethinking TypeAnnotation vs Annotation
Alex Buckley
alex.buckley at oracle.com
Thu Feb 6 12:15:03 PST 2014
Hi Eric,
"Any given annotation is potentially a type annotation" doesn't smell
right to me. For example, an annotation on a package declaration cannot
reasonably be considered as a "type annotation".
In fact, we can be real precise about this: there are eight declaration
contexts defined in JLS 9.6.4.1, and only five of them are called out in
9.7.4 as being a syntactic opportunity to annotate a type. The three
that aren't - package declarations, type declarations, and type
parameter declarations - are where you "cannot" have a type annotation,
by definition.
It may be helpful to review 9.7.4:
- A declaration annotation is an annotation that applies to a
declaration, and whose own type is applicable in the declaration context
(§9.6.4.1) represented by that declaration.
- A type annotation is an annotation that applies to a type (or any part
of a type), and whose own type is applicable in type contexts (§4.11).
- Whether an annotation applies to a declaration or to the type of the
declared entity - and thus, whether the annotation is a declaration
annotation or a type annotation - depends on the applicability of the
annotation's type: ...
Alex
On 2/6/2014 11:59 AM, Eric McCorkle wrote:
> In the process of working on the next roadmap step for type annotations,
> I've realized something.
>
> The current implementation, and I think most of everyone's thinking on
> annotations treats type annotations as a special case of regular
> annotations. Indeed, this is sort of the intuitive first thought.
>
> But looking at the actual implementation details, I think the reverse is
> actually true. Any given annotation is potentially a type annotation,
> especially earlier in the javac pipeline (where I'm presently generating
> TypeAnnotationPositions in my new patch). So, on the implementation
> front, it makes perfect sense to do things like store
> TypeAnnotationPositions in Attribute.Compound, as opposed to
> Attribute.TypeCompound.
>
> I think this would also go a long way towards creating the single
> codepath for attaching annotations that I want to create.
>
> Comments?
>
More information about the compiler-dev
mailing list