Do package-infos need to be reset between annotation processing rounds?

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Dec 6 02:09:10 UTC 2017


Generally, annotation processing is supposed to only create information 
where there was no information previously,  so if a package had a 
package-info with annotations, it seems like it should be an error to 
override it with another package-info, with or without annotations.

-- Jon

On 12/05/2017 05:39 PM, Liam Miller-Cushon wrote:
> Thanks! If an annotated package-info is loaded from the class path, 
> and then a processor generates a package-info that contains no 
> annotations, the reset is necessary. (The reset isn't necessary if the 
> new package-info is annotated, since the old annotations get 
> overwritten even if they weren't reset between rounds.)
>
> On Tue, Dec 5, 2017 at 4:46 PM, Jonathan Gibbons 
> <jonathan.gibbons at oracle.com <mailto:jonathan.gibbons at oracle.com>> wrote:
>
>     Liam,
>
>     What about the case where an annotation processor generates the
>     package-info.java file? Is that a case where it is important to
>     reinit the packge symbol correctly, so that the newly generated
>     code is read?
>
>     -- Jon
>
>
>     On 12/05/2017 03:39 PM, Liam Miller-Cushon wrote:
>
>         I have a question about the logic in
>         JavacProcessingEnvironment's treeCleaner that resets
>         package-info state between annotation processing rounds [1].
>
>         JDK-8193037 describes an issue where package-infos loaded from
>         the classpath are reset by treeCleaner. Those symbols doesn't
>         get reinitialized correctly, and package annotations are not
>         visible during subsequent annotation processing rounds.
>
>         I wondered if the logic was only meant to apply to
>         package-infos being compiled from source in the current
>         compilation (similar to how module-infos are handle by
>         treeCleaner), but I'm having trouble understanding when that
>         logic is necessary. Commenting out
>         `node.packge.package_info.reset();` and `node.packge.reset();`
>         in treeCleaner doesn't break any jtreg tests. Does anyone have
>         examples where that code is needed? I'd like to add a
>         regression test to ensure the fix for JDK-8193037 doesn't
>         interfere with the original purpose of that code.
>
>         Thanks,
>
>         [1]
>         http://hg.openjdk.java.net/jdk/jdk/file/a358ebcfacfb/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java#l1518
>         <http://hg.openjdk.java.net/jdk/jdk/file/a358ebcfacfb/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java#l1518>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20171205/5a7f81fa/attachment-0001.html>


More information about the compiler-dev mailing list