356 check(args.length == 1); |
356 check(args.length == 1); |
357 annos = args[0].getAnnotations(); |
357 annos = args[0].getAnnotations(); |
358 check(annos.length == 2); |
358 check(annos.length == 2); |
359 check(((TypeAnno)annos[0]).value().equals("I1")); |
359 check(((TypeAnno)annos[0]).value().equals("I1")); |
360 check(args[0].getAnnotation(TypeAnno2.class).value().equals("I2")); |
360 check(args[0].getAnnotation(TypeAnno2.class).value().equals("I2")); |
|
361 |
|
362 // check type args |
|
363 Field f = TestParameterizedType.class.getDeclaredField("theField"); |
|
364 AnnotatedParameterizedType fType = (AnnotatedParameterizedType)f.getAnnotatedType(); |
|
365 args = fType.getAnnotatedActualTypeArguments(); |
|
366 check(args.length == 1); |
|
367 annos = args[0].getAnnotations(); |
|
368 check(annos.length == 1); |
|
369 check(((TypeAnno2)annos[0]).value().equals("Map Arg")); |
|
370 check(args[0].getAnnotation(TypeAnno2.class).value().equals("Map Arg")); |
|
371 |
|
372 // check outer type type args |
|
373 fType = (AnnotatedParameterizedType)fType.getAnnotatedOwnerType(); |
|
374 args = fType.getAnnotatedActualTypeArguments(); |
|
375 check(args.length == 1); |
|
376 annos = args[0].getAnnotations(); |
|
377 check(annos.length == 1); |
|
378 check(((TypeAnno2)annos[0]).value().equals("String Arg")); |
|
379 check(args[0].getAnnotation(TypeAnno2.class).value().equals("String Arg")); |
|
380 |
|
381 // check outer type normal type annotations |
|
382 annos = fType.getAnnotations(); |
|
383 check(annos.length == 1); |
|
384 check(((TypeAnno)annos[0]).value().equals("FieldOuter")); |
|
385 check(fType.getAnnotation(TypeAnno.class).value().equals("FieldOuter")); |
361 } |
386 } |
362 |
387 |
363 private static void testWildcardType() throws Exception { |
388 private static void testWildcardType() throws Exception { |
364 Method m = TestWildcardType.class.getDeclaredMethod("foo", (Class<?>[])null); |
389 Method m = TestWildcardType.class.getDeclaredMethod("foo", (Class<?>[])null); |
365 AnnotatedType ret = m.getAnnotatedReturnType(); |
390 AnnotatedType ret = m.getAnnotatedReturnType(); |
561 } |
586 } |
562 |
587 |
563 abstract class TestParameterizedType implements @TypeAnno("M") Map<@TypeAnno("S")String, @TypeAnno("I") @TypeAnno2("I2")Integer> { |
588 abstract class TestParameterizedType implements @TypeAnno("M") Map<@TypeAnno("S")String, @TypeAnno("I") @TypeAnno2("I2")Integer> { |
564 public ParameterizedOuter<String>.ParameterizedInner<Integer> foo() {return null;} |
589 public ParameterizedOuter<String>.ParameterizedInner<Integer> foo() {return null;} |
565 public @TypeAnno("O") ParameterizedOuter<@TypeAnno("S1") @TypeAnno2("S2") String>. |
590 public @TypeAnno("O") ParameterizedOuter<@TypeAnno("S1") @TypeAnno2("S2") String>. |
566 @TypeAnno("I") ParameterizedInner<@TypeAnno("I1") @TypeAnno2("I2")Integer> foo2() { |
591 @TypeAnno("I") ParameterizedInner<@TypeAnno("I1") @TypeAnno2("I2")Integer> foo2() { |
567 return null; |
592 return null; |
568 } |
593 } |
|
594 |
|
595 public @TypeAnno("FieldOuter") ParameterizedOuter<@TypeAnno2("String Arg") String>. |
|
596 @TypeAnno("FieldInner")ParameterizedInner<@TypeAnno2("Map Arg")Map> theField; |
569 } |
597 } |
570 |
598 |
571 class ParameterizedOuter <T> { |
599 class ParameterizedOuter <T> { |
572 class ParameterizedInner <U> {} |
600 class ParameterizedInner <U> {} |
573 } |
601 } |