RFR: JDK-8200166: Repeating annotations refering to to-be-generated classes don't work.
Jan Lahoda
jan.lahoda at oracle.com
Wed Mar 28 15:42:01 UTC 2018
Hi,
javac in JDK 10 does not handle properly repeating annotations that
contain attributes referring to classes that are generated by an
annotation processor. E.g.:
---
@Annot(Gen.class)
@Annot(Gen.class)
public class GeneratedInRepeating {
}
---
(where "Annot" is a repeating annotation, and "Gen" is a class generated
by an annotation processor). This will fail to compile with (please see
the bug for a complete example):
---
... error: expression not allowed as annotation value
@Annot(Gen.class)
---
The annotation processors won't run, so won't have a chance to generate
the class.
The issue is that Annotate.processRepeatedAnnotations creates a
synthetic container annotation for the repeating annotation, constructs
an AST for it and tries to attribute it (Annotate lines 821-832). But
when the AST is created, as the class in the attribute value is missing,
there is an JCErroneous tree generated. And then when
Annotate.attributeAnnotationValue checks if the attribute's value is
well-formed, it finds the erroneous tree and barks.
The code was refactored in JDK-8181464, and was (AFAIK) accepting
erroneous trees without producing the error before that.
The proposed fix is to ignore the erroneous trees again. If there's an
erroneous tree, there should have been an error produced already, so
ignoring erroneous trees seems safe.
Proposed webrev: http://cr.openjdk.java.net/~jlahoda/8200166/webrev.00
Bug: https://bugs.openjdk.java.net/browse/JDK-8200166
Thanks,
Jan
More information about the compiler-dev
mailing list