Accessing type annotations via annotation processor

Joe Darcy joe.darcy at
Thu Aug 14 17:25:29 UTC 2014


On 08/13/2014 11:56 PM, Gunnar Morling wrote:
> Hi Alex,
> 2014-08-11 20:13 GMT+02:00 Alex Buckley <alex.buckley at 
> <mailto:alex.buckley at>>:
>     There are some known problems with retrieving type annotations on
>     type parameter declarations, in both the Core Reflection API and
>     the Language Model API. I believe type annotations on types used
>     in member declarations work OK. If you have the VariableElement
>     for 'values', you can get the TypeMirror for 'List<@NotNull
>     String>', then visit it as a DeclaredType and call
>     getTypeArguments() to get a TypeMirror for '@NotNull String'.
>     TypeMirror is an AnnotatedConstruct so it can return the
>     annotations on the use of 'String'.
> I tried what you suggested, but I only obtained a TypeMirror for 
> 'List<String>' from the VariableElement, thus the TypeMirror for the 
> type argument represents 'String' rather than '@NotNull String'. Is 
> there any example or test in OpenJDK which shows the retrieval of type 
> annotations via the Language Model API?

Since the AnnotatedConstruct interface is now implemented by both 
elements and type mirrors, is *should* work go call the annotation 
retrieval methods on a TypeMirror.

> Another issue is that the process() method of the annotation processor 
> is never invoked for the @NotNull annotation if it is only used as 
> type annotation (the processor will be invoked though if @NotNull is 
> e.g. used as a traditional field-level annotation). Is this an 
> expected behavior?

 From the revised discovery process documented in 

"Annotations on  type uses, as opposed to annotations on elements, are 
ignored when computing whether or not an annotation type is present."



> Thanks,
> --Gunnar
>     Alex
>     On 8/11/2014 3:22 AM, Gunnar Morling wrote:
>         Hi,
>         I'm looking for a way to obtain annotations given on type uses
>         using a
>         JSR 269 annotation processor.
>         E.g. I'd like to obtain the @NotNull annotation from the
>         following field
>         declaration:
>              ...
>              private List<@NotNull String> values;
>         Based on a post of Joe [1] I assumed this to be possible, but a
>         discussion on this list now makes me believe this cannot be
>         done as of
>         Java 8. Is this true? If so, will this be the case in SE 9?
>         On a tangent, Joe referenced a diff of the JavaDocs of two
>         versions of
>         the JSR 269 API, containing nicely colored mark-up
>         highlighting the
>         changes. What's the tool used for creating this diff?
>         Thanks,
>         --Gunnar
>         [1]
>         [2]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the compiler-dev mailing list