[Checkers] Compiler annotations output
Mahmood Ali
mahmood at MIT.EDU
Wed Jul 2 09:08:34 EDT 2008
Hi Mike,
>> writing @A at [CLASS_EXTENDS @-1 offset -1]
>> writing @B at [CLASS_EXTENDS @-1 offset -1]
>>
>> I cannot see how to differentiate between them.
>
> See section 4.1 at
> http://groups.csail.mit.edu/pag/jsr308/specification/java-annotation-design.html#htoc8
>
For some reason, now section 4.1 makes a bit of sense for me and I
have better understanding on what the ClassWriter is doing. I was
freaked by it writing out some of the Position fields and not others.
My problem is that I was trying to understand the specification
through what the compiler is doing. Now, I can clearly see (unless I
am horribly mistaken) that the compiler is buggy in enriching Position
fields. Position does not actually have type_index field.
Similarly for method parameters, consider the declaration:
public void test(List<@A Date> a1, List<@B Date> a2) { }
In the ClassWriter phase, the Position.parameter field for both
annotations is -1 when it supposed to 0 for @A, 1 for @B.
I will try to fix this.
>> Processing annotations is (more used to before my change) divided
>> between the following:
> Wow. Could you document this?
Yes. I will make a better write-up and add it to the repository
>> The problem was that in the desugering stage, the compiler rewrites
>> tree and trim some parts of it, namely:
>> - annotations on the extends and implements clauses
>> - all type arguments for parameterized types
>
> Why does it do that?
I don't know. I think removing annotations on extends and implements
clauses are accidental, but I don't know about all the parameterized
types.
Regards,
Mahmood
More information about the checkers
mailing list