@@ -0,0 +1,29 @@ | |||
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' | |||
} |
@@ -0,0 +1,3 @@ | |||
package p; | |||
public enum Color { RED, GREEN, AMBER } |
@@ -0,0 +1,14 @@ | |||
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.* | |||
} |
@@ -0,0 +1,14 @@ | |||
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 | |||
} |
@@ -0,0 +1,14 @@ | |||
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 | |||
} |
@@ -0,0 +1,3 @@ | |||
package q.r; | |||
public enum Fruit { APPLE, ORANGE, BANANA } |
@@ -0,0 +1,5 @@ | |||
package q.r; | |||
public @interface Fruity { | |||
Fruit value() default Fruit.BANANA; | |||
} |
@@ -0,0 +1,32 @@ | |||
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) * *(..)); | |||
} |
@@ -0,0 +1,29 @@ | |||
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) * *(..)) {} | |||
} |
@@ -0,0 +1,5 @@ | |||
package p; | |||
public @interface TrafficLight { | |||
Color value() default Color.RED; | |||
} |