Buggy code:
assertThat ( scopeAttrs . getString ( "value" ) , is ( "myScope" ) ) ; { AnnotationAttributes specialAttrs = ( ( AnnotationAttributes ) ( metadata . getAnnotationAttributes ( AnnotationMetadataTests . SpecialAttr . class . getName ( ) ) ) ) ; assertThat ( specialAttrs . size ( ) , is ( 6 ) ) ; assertTrue ( String . class . isAssignableFrom ( specialAttrs . getClass ( "clazz" ) ) ) ; assertTrue ( specialAttrs . getEnum ( "state" ) . equals ( Thread . State . NEW ) ) ; AnnotationAttributes nestedAnno = specialAttrs . getAnnotation ( "nestedAnno" ) ; assertThat ( "na" , is ( nestedAnno . getString ( "value" ) ) ) ; assertTrue ( nestedAnno . getEnum ( "anEnum" ) . equals ( AnnotationMetadataTests . SomeEnum . LABEL1 ) ) ; assertArrayEquals ( new Class [ ] { String . class } , ( ( Class [ ] ) ( nestedAnno . get ( "classArray" ) ) ) ) ; AnnotationAttributes [ ] nestedAnnoArray = specialAttrs . getAnnotationArray ( "nestedAnnoArray" ) ; assertThat ( nestedAnnoArray . length , is ( 2 ) ) ; assertThat ( nestedAnnoArray [ 0 ] . getString ( "value" ) , is ( "default" ) ) ; assertTrue ( nestedAnnoArray [ 0 ] . getEnum ( "anEnum" ) . equals ( AnnotationMetadataTests . SomeEnum . DEFAULT ) ) ; assertArrayEquals ( new Class [ ] { Void . class } , ( ( Class [ ] ) ( nestedAnnoArray [ 0 ] . get ( "classArray" ) ) ) ) ; assertThat ( nestedAnnoArray [ 1 ] . getString ( "value" ) , is ( "na1" ) ) ; assertTrue ( nestedAnnoArray [ 1 ] . getEnum ( "anEnum" ) . equals ( AnnotationMetadataTests . SomeEnum . LABEL2 ) ) ; assertArrayEquals ( new Class [ ] { Number . class } , ( ( Class [ ] ) ( nestedAnnoArray [ 1 ] . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new Class [ ] { Number . class } , nestedAnnoArray [ 1 ] . getClassArray ( "classArray" ) ) ; AnnotationAttributes optional = specialAttrs . getAnnotation ( "optional" ) ; assertThat ( optional . getString ( "value" ) , is ( "optional" ) ) ; assertTrue ( optional . getEnum ( "anEnum" ) . equals ( AnnotationMetadataTests . SomeEnum . DEFAULT ) ) ; assertArrayEquals ( new Class [ ] { Void . class } , ( ( Class [ ] ) ( optional . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new Class [ ] { Void . class } , optional . getClassArray ( "classArray" ) ) ; AnnotationAttributes [ ] optionalArray = specialAttrs . getAnnotationArray ( "optionalArray" ) ; assertThat ( optionalArray . length , is ( 1 ) ) ; assertThat ( optionalArray [ 0 ] . getString ( "value" ) , is ( "optional" ) ) ; assertTrue ( optionalArray [ 0 ] . getEnum ( "anEnum" ) . equals ( AnnotationMetadataTests . SomeEnum . DEFAULT ) ) ; assertArrayEquals ( new Class [ ] { Void . class } , ( ( Class [ ] ) ( optionalArray [ 0 ] . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new Class [ ] { Void . class } , optionalArray [ 0 ] . getClassArray ( "classArray" ) ) ; } { AnnotationAttributes specialAttrs = ( ( AnnotationAttributes ) ( metadata . getAnnotationAttributes ( AnnotationMetadataTests . SpecialAttr . class . getName ( ) , true ) ) ) ; assertThat ( specialAttrs . size ( ) , is ( 6 ) ) ; assertThat ( specialAttrs . get ( "clazz" ) , is ( ( ( Object ) ( String . class . getName ( ) ) ) ) ) ; assertThat ( specialAttrs . getString ( "clazz" ) , is ( String . class . getName ( ) ) ) ; AnnotationAttributes nestedAnno = specialAttrs . getAnnotation ( "nestedAnno" ) ; <START_BUG> assertArrayEquals ( new String [ ] { String . class . getName ( ) } , nestedAnno . getStringArray ( "classArray" ) ) ; <END_BUG> assertArrayEquals ( new String [ ] { String . class . getName ( ) } , nestedAnno . getStringArray ( "classArray" ) ) ; AnnotationAttributes [ ] nestedAnnoArray = specialAttrs . getAnnotationArray ( "nestedAnnoArray" ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , ( ( String [ ] ) ( nestedAnnoArray [ 0 ] . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , nestedAnnoArray [ 0 ] . getStringArray ( "classArray" ) ) ; assertArrayEquals ( new String [ ] { Number . class . getName ( ) } , ( ( String [ ] ) ( nestedAnnoArray [ 1 ] . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new String [ ] { Number . class . getName ( ) } , nestedAnnoArray [ 1 ] . getStringArray ( "classArray" ) ) ; AnnotationAttributes optional = specialAttrs . getAnnotation ( "optional" ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , ( ( String [ ] ) ( optional . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , optional . getStringArray ( "classArray" ) ) ; AnnotationAttributes [ ] optionalArray = specialAttrs . getAnnotationArray ( "optionalArray" ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , ( ( String [ ] ) ( optionalArray [ 0 ] . get ( "classArray" ) ) ) ) ; assertArrayEquals ( new String [ ] { Void . class . getName ( ) } , optionalArray [ 0 ] . getStringArray ( "classArray" ) ) ; }

Fix:
assertArrayEquals ( new String [ ] { String . class . getName ( ) } , ( ( String [ ] ) ( nestedAnno . getStringArray ( "classArray" ) ) ) ) ;