RFR 7183985: Class.getAnnotation() throws an ArrayStoreException when the annotation class not present

Liam Miller-Cushon cushon at google.com
Sun Feb 25 01:14:55 UTC 2018


Hi, thanks for the comments.

The updated webrev is at:
http://cr.openjdk.java.net/~cushon/7183985/webrev.02/

On Fri, Feb 23, 2018 at 4:29 PM, Joseph D. Darcy <joe.darcy at oracle.com>
wrote:

> Objects implementing the AnnotatedElement interface are also created in
> javac during annotation processing. As a secondary concern, it would be
> good to be have behavior between both javac and runtime annotations
> consistent when possible. (My own to-do list includes at least once such
> alignment JDK-8164819: "Make javac's toString() on annotation objects
> consistent with core reflection".)
>

Do you have a pointer to where that happens? There's javax.lang.model.
AnnotatedConstruct#getAnnotation, which isn't affected by this issue--it
throws MirroredTypesExceptionProxy when accessing an annotation value that
is an array of class literals, regardless of whether the elements' classes
are missing. I'm not seeing implementations of AnnotatedElement in
langtools.


> Even in javac we've moved away from test and directory names based on
> bugid. I'd recommend incorporating these regression tests into the existing
> tests in
>     test/jdk/java/lang/annotation/Missing
>

Thanks for the reminder, done.


> It would be worth verifying whether or not this change also covers
> java.lang.reflect.Executable.getParameterAnnotations(), more specifically
> the implementation of that method in Method and Constructor. The method
> getParameterAnnotations() is much less used than getAnnotations and the
> other methods on the AnnotatedElement interface, but still part of the
> annotations feature.
>

Done.


> (As a follow-up refactoring, it might be worthwhile to replace the
> interior of the three parseFooArray methods to a shared method that is
> passed a lambda for the "Object value = parseFooValue(/*args to get
> foo*/...);" logic.)
>

Sounds good, I filed: https://bugs.openjdk.java.net/browse/JDK-8198669


More information about the core-libs-dev mailing list