jdk/test/java/lang/annotation/TypeAnnotationReflection.java
changeset 34708 4a1e3728135c
parent 31139 d48c3edf6a55
equal deleted inserted replaced
34707:5866a10ac337 34708:4a1e3728135c
    21  * questions.
    21  * questions.
    22  */
    22  */
    23 
    23 
    24 /*
    24 /*
    25  * @test
    25  * @test
    26  * @bug 8004698 8007073 8022343 8054304 8058595
    26  * @bug 8004698 8007073 8022343 8054304 8057804 8058595
    27  * @summary Unit test for type annotations
    27  * @summary Unit test for type annotations
    28  */
    28  */
    29 
    29 
    30 import java.util.*;
    30 import java.util.*;
    31 import java.lang.annotation.*;
    31 import java.lang.annotation.*;
   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 }