RFR 7183985: Class.getAnnotation() throws an ArrayStoreException when the annotation class not present
Joseph D. Darcy
joe.darcy at oracle.com
Sat Feb 24 00:29:56 UTC 2018
Hello,
A few initial comments, not my final review.
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".)
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
or creating a subdirectory for conditions, etc..
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.
(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.)
Thanks,
-Joe
On 2/23/2018 10:06 AM, joe darcy wrote:
> On 2/23/2018 9:39 AM, Alan Bateman wrote:
>> On 22/02/2018 23:20, Liam Miller-Cushon wrote:
>>> Hello,
>>>
>>>
>>> Please consider this fix for JDK-7183985.
>>>
>>>
>>> bug: https://bugs.openjdk.java.net/browse/JDK-7183985
>>>
>>> webrev: http://cr.openjdk.java.net/~cushon/7183985/webrev.01/
>>>
>>>
>>> I started a CSR for the change:
>>> https://bugs.openjdk.java.net/browse/JDK-8198584
>>>
>>> We have been using the fix at Google for about two years, and there has
>>> been no compatibility impact. I found very few places
>>> ArrayStoreException
>>> was being explicitly handled, and none that were depending on the
>>> current
>>> behaviour of getAnnotation().
>>>
>>>
>>> There was some previous discussion of the bug on core-libs-dev:
>>>
>> Yes, this one comes up every few years. I'm hoping Joe Darcy will
>> reply to your review with any background or issues from when this
>> came up in the past. From a distance then retrofitting
>> AnnotatedElement getXXX methods to throw TypeNotPresentException
>> seems reasonable, I'm less sure about the isAnnotationPresent method
>> as it might be surprising for that to fail.
>>
>
> On my list!
>
> Cheers,
>
> -Joe
>
More information about the core-libs-dev
mailing list