Hi Liam, I think you need to do skipMemberValue the correct number of times so that the cursor in buf is correct, or?
I modified your test slightly to provoke an AnnotationTypeMismatchException that I think shouldn't be there: @AnnotationAnnotation({@ClassArrayAnnotation({Missing.class, String.class}), @ClassArrayAnnotation({String.class})}) public class F {} and @Retention(RUNTIME) public @interface AnnotationAnnotation { ClassArrayAnnotation[] value(); } giving: java.lang.RuntimeException: java.lang.annotation.AnnotationTypeMismatchException: Incorrectly typed data found for annotation element public abstract ClassArrayAnnotation[] AnnotationAnnotation.value() (Found data of type Array with component tag: 99) Also, in MissingArrayElementTest, why not just rethrow t? 52 if (t.getClass() != EnumConstantNotPresentException.class) { 53 System.err.printf( 54 "expected %s, saw %s\n", EnumConstantNotPresentException.class, t); 55 throw new RuntimeException(t); 56 } cheers /Joel On Mon, Dec 21, 2015 at 9:42 PM, Liam Miller-Cushon <cus...@google.com> wrote: > If an annotation value is an array of class literals or enum constants, > calling Class.getAnnotation() fails with ArrayStoreException if the element > type is not found. > > This patch implements the proposed fix from the bug thread, which allows > getAnnotation() to succeed and a TypeNotPresentException to be thrown from > Annotation.value(). > > bug: https://bugs.openjdk.java.net/browse/JDK-7183985 > > The patch is attached.