mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-14 02:10:40 +02:00
51 lines
1.9 KiB
Java
51 lines
1.9 KiB
Java
import org.aspectj.testing.*;
|
|
|
|
public class PR335 {
|
|
public static void main(String[] args) {
|
|
Ship s = new Ship();
|
|
Tester.clearEvents();
|
|
s.handleCollision();
|
|
Tester.checkAndClearEvents("before3(d=0) inflictDamage(0) handleCollision()");
|
|
s.handleCollision("dummy");
|
|
Tester.checkAndClearEvents("before1(so=dummy,d=1) inflictDamage(1) handleCollision(Object)");
|
|
s.handleCollision(1);
|
|
Tester.checkAndClearEvents("before2(so=1,d=2) inflictDamage(2) handleCollision(int)");
|
|
s.inflictDamage(3);
|
|
Tester.checkAndClearEvents("inflictDamage(3)");
|
|
}
|
|
}
|
|
|
|
|
|
aspect Bug1 {
|
|
pointcut collisionDamage(Ship s, Object so, int d) :
|
|
this(s)
|
|
&& cflow(call(void handleCollision(Object)) && args(so))
|
|
&& call(void Ship.inflictDamage(int)) && args(d);
|
|
before(Ship s, Object so, int d) : collisionDamage(s, so, d) {
|
|
Tester.event("before1(so="+so.toString()+",d="+d+")");
|
|
}
|
|
|
|
pointcut collisionDamage2(Ship s, int so, int d) :
|
|
this(s)
|
|
&& cflow(call(void handleCollision(int)) && args(so))
|
|
&& call(void Ship.inflictDamage(int)) && args(d);
|
|
before(Ship s, Object so, int d) : collisionDamage2(s, so, d) {
|
|
Tester.event("before2(so="+so+",d="+d+")");
|
|
}
|
|
|
|
pointcut collisionDamage3(Ship s, int d) :
|
|
this(s)
|
|
&& withincode(void handleCollision())
|
|
&& call(void Ship.inflictDamage(int)) && args(d);
|
|
before(Ship s, int d) : collisionDamage3(s, d) {
|
|
Tester.event("before3(d="+d+")");
|
|
}
|
|
}
|
|
|
|
class Ship {
|
|
void handleCollision() { inflictDamage(0); Tester.event("handleCollision()"); }
|
|
void handleCollision(Object so) { inflictDamage(1); Tester.event("handleCollision(Object)"); }
|
|
void handleCollision(int so) { inflictDamage(2); Tester.event("handleCollision(int)"); }
|
|
void inflictDamage(int i) { Tester.event("inflictDamage(" + i + ")"); }
|
|
}
|