--- /dev/null
+enum Color { RED, GREEN, AMBER }
+
+@interface TrafficLight {
+ Color value() default Color.RED;
+}
+
+public class Broken1 {
+ public static void main(String[] args) {
+
+ }
+}
+
+class Marked {
+
+ public void a() {}
+
+ @TrafficLight
+ public void b() {}
+
+ @TrafficLight(Color.RED)
+ public void c() {}
+
+ @TrafficLight(Color.GREEN)
+ public void d() {}
+}
+
+aspect X {
+ pointcut p1(): execution(@TrafficLight(a) * *(..)); // value of just 'a' doesn't mean anything - only enums supported right now, let's say 'invalid annotation value'
+}
--- /dev/null
+package p;
+
+public enum Color { RED, GREEN, AMBER }
--- /dev/null
+package a;
+
+import p.*;
+
+public aspect EnumTest1 {
+ public static void main(String[] argv) {
+
+ }
+ @TrafficLight(Color.RED) public void m() {}
+ @TrafficLight(Color.GREEN) public void n() {}
+ @TrafficLight public void o() {}
+
+ before(): execution(@TrafficLight(Color.RED) * *(..)) {} // referencing Color via import of p.*
+}
\ No newline at end of file
--- /dev/null
+package a;
+
+import p.*;
+
+public aspect EnumTest2 {
+ public static void main(String[] argv) {
+
+ }
+ @TrafficLight(Color.RED) public void m() {}
+ @TrafficLight(Color.GREEN) public void n() {}
+ @TrafficLight public void o() {}
+
+ before(): execution(@TrafficLight(p.Color.RED) * *(..)) {}; // referencing Color directly in package p
+}
\ No newline at end of file
--- /dev/null
+package a;
+
+import p.*;
+
+public aspect EnumTest3 {
+ public static void main(String[] argv) {
+
+ }
+ @q.r.Fruity(q.r.Fruit.APPLE) public void m() {}
+ @q.r.Fruity(q.r.Fruit.BANANA) public void n() {}
+ @q.r.Fruity public void o() {}
+
+ before(): execution(@q.r.Fruity(q.r.Fruit.APPLE) * *(..)) {}; // static import of fruits
+}
\ No newline at end of file
--- /dev/null
+package q.r;
+
+public enum Fruit { APPLE, ORANGE, BANANA }
--- /dev/null
+package q.r;
+
+public @interface Fruity {
+ Fruit value() default Fruit.BANANA;
+}
\ No newline at end of file
--- /dev/null
+enum Color { RED, GREEN, AMBER }
+
+@interface TrafficLight {
+ Color value() default Color.RED;
+}
+
+public class Parsing {
+ public static void main(String[] args) {
+
+ }
+}
+
+class Marked {
+
+ public void a() {}
+
+ @TrafficLight
+ public void b() {}
+
+ @TrafficLight(Color.RED)
+ public void c() {}
+
+ @TrafficLight(Color.GREEN)
+ public void d() {}
+}
+
+aspect X {
+ pointcut p1(): execution(@TrafficLight(Color.GREEN) * *(..));
+ pointcut p2(): execution(@TrafficLight(a=Color.GREEN) * *(..));
+ pointcut p3(): execution(@TrafficLight(a=Color.RED,c=Color.RED) * *(..));
+ pointcut p4(): execution(@TrafficLight(a=Color.RED,c=Color.RED,e=Color.RED) * *(..));
+}
\ No newline at end of file
--- /dev/null
+enum Color { RED, GREEN, AMBER }
+
+@interface TrafficLight {
+ Color value() default Color.RED;
+}
+
+public class Simple {
+ public static void main(String[] args) {
+
+ }
+}
+
+class Marked {
+
+ public void a() {}
+
+ @TrafficLight
+ public void b() {}
+
+ @TrafficLight(Color.RED)
+ public void c() {}
+
+ @TrafficLight(Color.GREEN)
+ public void d() {}
+}
+
+aspect X {
+ before(): execution(@TrafficLight(Color.RED) * *(..)) {}
+}
\ No newline at end of file
--- /dev/null
+package p;
+
+public @interface TrafficLight {
+ Color value() default Color.RED;
+}
\ No newline at end of file