/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package test.org.jikesrvm.basic.core.annotation; import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Class to test inheritance of annotations. */ public class TestAnnotations { /** Annotation recursively defined */ @Retention(RetentionPolicy.RUNTIME) @A public @interface A { } static void testA() { final Annotation[] annotations = A.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } } /** Class value recursively defined */ @Retention(RetentionPolicy.RUNTIME) public @interface B { Class value() default B.class; } @B class testB{} static void testB() { final Annotation[] annotations = testB.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } System.out.println(testB.class.getAnnotation(B.class).value()); System.out.println(testB.class.getAnnotation(B.class)); } /** Enum values */ public enum testC_Enum {one, two, three}; @Retention(RetentionPolicy.RUNTIME) public @interface C { testC_Enum value() default testC_Enum.one; } @C class testC_1{} @C(testC_Enum.two) class testC_2{} static void testC() { Annotation[] annotations = testC_1.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } annotations = testC_2.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } System.out.println(testC_1.class.getAnnotation(C.class).value()); System.out.println(testC_1.class.getAnnotation(C.class)); System.out.println(testC_2.class.getAnnotation(C.class).value()); System.out.println(testC_2.class.getAnnotation(C.class)); } /** Arrays */ @Retention(RetentionPolicy.RUNTIME) public @interface D { Class[] value() default {D.class}; } @D class testD_1{} @D({testD_1.class, testD_2.class, D.class}) class testD_2{} static void testD() { Annotation[] annotations = testD_1.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } annotations = testD_2.class.getAnnotations(); for (final Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); } for (final Object o : testD_1.class.getAnnotation(D.class).value()) { System.out.println(o); } System.out.println(testD_1.class.getAnnotation(D.class)); for (final Object o : testD_2.class.getAnnotation(D.class).value()) { System.out.println(o); } System.out.println(testD_2.class.getAnnotation(D.class)); } public static void main(String[] args) { testA(); testB(); testC(); testD(); } }