Spec clarification, where are annotations without @Target applicable?

Joel Borggrén-Franck joel.p.borggren-franck at oracle.com
Mon Oct 19 09:48:57 UTC 2020


Hello JLS experts,

When reviewing the proposed fix for annotations not being applicable to 
modules by default [3] I noticed that the Javadoc [1] and JLS wording 
[2] for which annotation contexts are applicable by default have 
diverged since Java 14. The javaoc for j.l.a.Target keeps the old wording:

"If an @Target meta-annotation is not present on an annotation type T, 
then an annotation of type T may be written as a modifier for any 
declaration except a type parameter declaration."

While the JLS since 14 states:

"If an annotation of type java.lang.annotation.Target is not present on 
the declaration of an annotation type T, then T is applicable in all 
nine declaration contexts and in all 16 type contexts."

vs JLS 13:

"If an annotation of type java.lang.annotation.Target is not present on 
the declaration of an annotation type T, then T is applicable in all 
declaration contexts except type parameter declarations, and in no type 
contexts.

These contexts are the syntactic locations where annotations were 
allowed in Java SE 7."

I can't find any mention of this change in a CSR so it is not yet clear 
to me if the Javadoc or the JLS needs to be updated.

cheers
/Joel

[1] 
https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/annotation/Target.html 

[2] 
https://docs.oracle.com/javase/specs/jls/se15/html/jls-9.html#jls-9.6.4.1
[3] https://github.com/openjdk/jdk/pull/622



More information about the compiler-dev mailing list