RFR: JDK-8252307: javac rejects code with annotation applicable to fields

Vicente Romero vicente.romero at oracle.com
Mon Aug 31 17:10:24 UTC 2020


Please review fix for [1] at [2]. There were several issues at play 
here. First the parameters added by the compiler to the compact 
constructor were not marked as generated, meaning that later on when 
checking for annotations, at Check::validateAnnotation, it couldn't be 
determine if the annotations were added automatically with the intention 
to remove them if out of place. Which is the strategy for elements 
generated from the record components. Or if they were explicitly added 
by the user. The current implementation was assuming the last option and 
thus flagging an error. Also I realized that at 
Check::getApplicableTargets, the case when the target is MODULE was not 
covered. This was not the product of the records patch which rewrote 
this method, this was like this since the modules times. I think that 
for completeness, and correctness, there should be a case for target 
MODULE at Check::getApplicableTargets. The compiler was accepting 
annotations applied to ElementType.MODULE, just because it was accepting 
annotations applied to unknown targets assuming that there was a bug in 
the source that would be flagged anyway. I realize that this change to 
Check::getApplicableTargets could be considered outside of the reach of 
this patch so I'm OK with removing it and file a separate bug if we 
consider it a better approach,


[1] https://bugs.openjdk.java.net/browse/JDK-8252307
[2] http://cr.openjdk.java.net/~vromero/8252307/webrev.00/

More information about the compiler-dev mailing list