FYI, JSR 308 and the annotation processing discovery process

Joe Darcy joe.darcy at oracle.com
Mon Apr 1 21:19:30 PDT 2013


On 03/29/2013 03:10 PM, Alex Buckley wrote:
> On 3/28/2013 10:39 PM, Joe Darcy wrote:
>> FYI, as the JSR 269 maintenance lead, besides updating the
>> javax.lang.model.* API to handle new-in-Java-SE-8 features, I'm not
>> looking at updating the javax.annotation.processing API to deal with
>> those new annotation-related features too.
>
> "not looking"? Surely "now looking".

Quite!

>
>> "The tool uses a discovery process to find annotation processors and
>> decide whether or not they should be run. [...] Which processors the
>> tool asks to run is a function of what annotations are present on the
>> root elements, what annotation types a processor processes, and whether
>> or not a processor claims the annotations it processes. [...] For a
>> given round, the tool computes the set of annotation types on the root
>> elements. If there is at least one annotation type present, as
>> processors claim annotation types, they are removed from the set of
>> unmatched annotations."
>
> Close reading of the above paragraph reveals that:
>
> - a processor _claims_ annotation types
> - a processor _claims_ annotations
> - a processor _processes_ annotations
> - from a set of annotations, it is possible to remove annotation _types_
>
> I contend there is at least one kind error going on here.

I will tighten up the wording accordingly; thanks for the careful reading.

>
>> To this, I plan to add a paragraph explaining how type annotations do
>> not interact with the this discovery process; something like:
>>
>> "<p>An annotation type is considered present if there is at least one
>> annotation of that type on a declaration enclosed within the root
>> elements of a round. For this purpose, a type parameter is considered
>> to be enclosed by its generic element. Annotations on type uses are
>> <em>not</em> considered as part of the computation.
>
> There is quite a phase shift between the "For this purpose" sentence 
> and the type uses sentence. I think a new paragraph is warranted: 
> "Annotations on type uses are ignored when computing the set of 
> annotation types present on the root elements."
>
>> For the purposes of JSR 308:
>>
>> * Declaration annotations on type parameters are included in discovery
>> * TYPE_USE annotations are *not* included as part of discovery
>
> You mean to put "For the purposes of JSR 308" into the SE 8 API spec?

No. "For the purposes of JSR 308" is just for the purposes of this email 
thread :-)

> That would be wrong, as a JSR number is pure administration and the 
> API spec should deal only in features.

Agreed.

>
> For the bullet points, beware: an annotation whose type targets 
> TYPE_USE can appear on a type declaration or a type parameter 
> declaration. Surely you want such an annotation on class Foo's 
> declaration to be discovered. Do you mean:
>
> - Annotations on type parameter declarations are included in discovery.
> - Annotations on type uses are not included in discovery.
>
>

Annotations on declarations, including declarations of type parameters, 
are included in discovery.

-Joe



More information about the type-annotations-spec-comments mailing list