diff options
Diffstat (limited to 'tests/new/Counting1.java')
-rw-r--r-- | tests/new/Counting1.java | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/tests/new/Counting1.java b/tests/new/Counting1.java new file mode 100644 index 000000000..d57789612 --- /dev/null +++ b/tests/new/Counting1.java @@ -0,0 +1,156 @@ +import java.util.Vector; +import org.aspectj.testing.*; + +public class Counting1 { + public static void main(String[] args) { + + Point pt1 = new Point(0, 0); + Point pt2 = new Point(4, 4); + Line ln1 = new Line(pt1, pt2); + + System.out.println(MoveTracking.testAndClear()); + ln1.translate(3, 6); + System.out.println(MoveTracking.testAndClear()); + + System.out.println(pt1.getX()); + Mobility.disableMoves(); + ln1.translate(3, 6); + System.out.println(pt1.getX()); + + } + + static class System { + static O out = new O(); + static class O { + public void println(Object o) {} + public void println(int i) {} + public void println(boolean b) {} + } + } +} + +class FigureEditor { + //... +} + +class Figure { + Vector elements = new Vector(); + //... +} + + + +interface FigureElement { + public void translate(int dx, int dy); + //... +} + +class Point implements FigureElement { + private int _x = 0, _y = 0; + + Point(int x, int y) { + _x = x; + _y = y; + } + + public void translate(int dx, int dy) { + setX(getX() + dx); + setY(getY() + dy); + } + + int getX() { return _x; } + int getY() { return _y; } + + void setX(int x) { _x = x; } + void setY(int y) { _y = y; } + + //... +} + +class Line implements FigureElement { + private Point _p1, _p2; + + Line (Point p1, Point p2) { + _p1 = p1; + _p2 = p2; + } + + public void translate(int dx, int dy) { + _p1.translate(dx, dy); + _p2.translate(dx, dy); + } + + Point getP1() { return _p1; } + Point getP2() { return _p2; } + + void setP1(Point p1) { _p1 = p1; } + void setP2(Point p2) { _p2 = p2; } + + //... +} + +aspect JoinPointCounting { + + static int n = 0; + static boolean enable = true; + + pointcut points(): + /* + instanceof(*) && + !(receptions(* *.new(..)) || + executions(* *.new(..))); + */ + + call(* *.*(..)) || + //receptions(* *.*(..)) || + execution(* *.*(..));/* || + gets(* *.*) || + sets(* *.*); + */ + + + before(): points() && !within(JoinPointCounting) { + if ( enable ) { + String s = thisJoinPoint + ""; + Tester.check(s.indexOf("$") == -1, s + " contains a $"); + } + } +} + + +aspect MoveTracking { + + static boolean flag = false; + + static boolean testAndClear() { + boolean result = flag; + flag = false; + return result; + } + + pointcut moves(): + call(void FigureElement.translate(int, int)) || + call(void Line.setP1(Point)) || + call(void Line.setP2(Point)) || + call(void Point.setX(int)) || + call(void Point.setY(int)); + + after(): moves() { + flag = true; + } + } + +aspect Mobility { declare dominates: Mobility, MoveTracking; + private static boolean enableMoves = true; + + static void enableMoves() { enableMoves = true; } + static void disableMoves() { enableMoves = false; } + + void around(): MoveTracking.moves() { + if ( enableMoves ) + proceed(); //!!! in versions prior to 0.7b10 runNext is a + //!!! method on the join point object, so the + //!!! syntax of this call is slightly different + //!!! than in the paper + } +} |