mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-18 02:11:48 +02:00
54 lines
1.4 KiB
Java
54 lines
1.4 KiB
Java
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;
|
|
}
|