The text you quoted ("When the new...") is a high-level explanation - a
policy - of how Core Reflection should work. The text then proceeds to
give definitions suitable for the API spec: "This policy for Java SE 8
is reified in the following definitions: ...".
Alex
On 10/22/2013 7:06 AM, Peter Levart wrote:
Hi,
In the spec. document:
http://cr.openjdk.java.net/~abuckley/8misc.pdf
<http://cr.openjdk.java.net/%7Eabuckley/8misc.pdf>
on page 11, chapter 1.2 the following:
When the new get[Declared]AnnotationsByType(Class<T>) methods are
called for a repeatable annotation type T, the question is how to
extend the policy
to handle multiple annotations of type T on the superclass and/or
subclass. Oracle
proposes the following policy for Java SE 8:
• If a class declaration does not have either a "directly present"
annotation of
type T or an "indirectly present by containment" annotation of type T,
the class
declaration may be "associated" with an annotation of type T due to
inheritance.
• If a class declaration does have either a "directly present"
annotation of type T
or an "indirectly present by containment" annotation of type T, the
annotation
is deemed to "override" every annotation of type T which is
"associated" with
the superclass.
...seems to be unnecessary complication. It could be replaced simply by:
When the new get[Declared]AnnotationsByType(Class<T>) methods are
called for a repeatable annotation type T, they return annotations
of type T *associated* with annotated element E.
Since term "associated" is already defined below as:
• An annotation A is *associated* with an element E if either:
- A is directly or indirectly present on E; or
- No annotation of A's type is directly or indirectly present on E,
and E is a class,
and A's type is inheritable (§9.6.3.3), and A is associated with the
superclass
of E.
Regards, Peter