1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import java.lang.annotation.*;
- import java.lang.reflect.*;
-
- @Retention(RetentionPolicy.RUNTIME)
- @interface Annot1 {}
- @Retention(RetentionPolicy.RUNTIME)
- @interface Annot2 {}
- @Retention(RetentionPolicy.RUNTIME)
- @interface Annot3 {}
-
- public class Target {
- public static void main(String[] argv) throws Exception {
- System.out.println("Field one");
- printAnnotations(A.class.getDeclaredField("one"));
- printAnnotations(B.class.getDeclaredField("one"));
- System.out.println("Field two");
- printAnnotations(A.class.getDeclaredField("two"));
- printAnnotations(B.class.getDeclaredField("two"));
- System.out.println("Field three");
- printAnnotations(A.class.getDeclaredField("three"));
- printAnnotations(B.class.getDeclaredField("three"));
- }
-
- public static void printAnnotations(Field field) {
- Annotation[] annos = field.getAnnotations();
- if (annos==null || annos.length==0) {
- System.out.println("no annotations");
- } else {
- for (Annotation anno: annos) {
- System.out.print(anno+" ");
- }
- System.out.println();
- }
- }
- }
-
- class A {
- public int one;
- public String two;
- public float three;
- }
-
- class B {
- public int one;
- public String two;
- public float three;
- }
-
- aspect DeclareAnnot {
- declare @field: (int A.one) || (int B.one): @Annot1;
- declare @field: (String two) && !(* B.*): @Annot2;
- declare @field: !(* one) && !(* two): @Annot3;
- }
|