JDK 9 request for specification changes of JDK-8032230: Enhance javax.a.p.RoundEnvironment after repeating annotations
joe darcy
joe.darcy at oracle.com
Wed May 18 19:55:18 UTC 2016
Hello,
Please review the patch below which proposes a new method to address
JDK-8032230: Enhance javax.a.p.RoundEnvironment after repeating
annotations
At present, this is just a review of the specification of the default
method in the interface and *not* a more optimized implementation in the
javac RoundEnvironemnt implementation (and not any tests that would be
needed for the new functionality).
Note that the bug proposes adding two methods
RoundEnvironment.getElementsAnnotatedWith(Set<Class<? extends
Annotation>> s)
RoundEnvironment.getElementsAnnotatedWith(Set<AnnotationMirror> s)
but these methods would clash since their erasure is the same. *sad
tromphone*
Therefore, I'm only proposing to add the Class-based variant since that
one is the more commonly used of the two.
Thanks,
-Joe
+ /**
+ * Returns the elements annotated with any of the given annotation
+ * types.
+ *
+ * @apiNote This method may be useful when processing repeating
+ * annotations by looking for an annotation type and its
+ * containing annotation type at the same time.
+ *
+ * @implSpec The default implementation of this method creates an
+ * empty result set, iterates over the annotations in the argument
+ * set calling {@link #getElementsAnnotatedWith(TypeElement)} on
+ * each annotation and adding those results to the result
+ * set. Finally, the contents of the result set are returned as an
+ * unmodifiable set.
+ *
+ * @param annotations annotation type being requested
+ * @return the elements annotated with the given annotation types,
+ * or an empty set if there are none
+ * @throws IllegalArgumentException if the any elements of the
+ * argument set do not represent an annotation type
+ * @since 9
+ */
+ default Set<? extends Element> getElementsAnnotatedWith(Set<Class<?
extends Annotation>> annotations){
+ HashSet<Element> result = new HashSet<>();
+ for (Class<? extends Annotation> annotation : annotations) {
+ result.addAll(getElementsAnnotatedWith(annotation));
+ }
+ return Collections.unmodifiableSet(result);
+ }
More information about the compiler-dev
mailing list