+++ /dev/null
-/* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Common Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * PARC initial implementation
- * ******************************************************************/
-
-package answers;
-
-aspect Answer1c {
- declare error
- : set(private * *)
- && !(withincode(* set*(..))
- || withincode(new(..))
- || withincode(void figures.Point.move(int, int)))
- && within(figures.*)
- : "bad field set";
-}
import support.Log;
-import figures.Point;
-
aspect Answer3a {
- before(): execution(void Point.move(int, int)) {
- Log.log("moving");
+ before(): execution(public * *(..)) && within(figures.*) {
+ Log.log(thisJoinPoint.toString());
}
}
import figures.FigureElement;
aspect Answer3b {
- before():
- execution(void Group.add(FigureElement)) && args(Point) {
- Log.log("adding Point");
+ before(Object o):
+ execution(public * *(..))
+ && within(figures.*) && target(o)
+ && !withincode(public String toString(..)) // don't overflow!
+ {
+ Log.log(thisJoinPoint.toString() + " at " + o);
}
}
import support.Log;
-import figures.Point;
-import figures.Group;
-import figures.FigureElement;
+import figures.*;
aspect Answer3c {
- private Group Point.enclosingGroup = null;
-
- before(Point p, Group g):
- execution(void add(FigureElement)) && args(p) && target(g) {
- p.enclosingGroup = g;
- }
-
- before(Point p):
- call(void move(int, int)) && target(p) {
- Log.log("moving as a part of " + p.enclosingGroup);
+ before():
+ execution(void Group.add(FigureElement)) && args(Point) {
+ Log.log("adding Point");
}
-
}
<delete dir="dist" />
</target>
+ <target name="javaclean">
+ <delete dir="dist" />
+ </target>
+
+
</project>
</p>
<blockquote><PRE>
-$ ajc -Xlint -argfile base.lst
-
$ java tests.Test2a
-.F.F.F....
-Time: 0.099
-There were 3 failures:
+.F..F....
+Time: 0.04
+There were 2 failures:
1) testTooSmall(tests.Test2a)junit.framework.AssertionFailedError: should have thrown IllegalArgumentException
-2) testTooBig(tests.Test2a)junit.framework.AssertionFailedError: should have thrown IllegalArgumentException
-3) testMove(tests.Test2a)junit.framework.AssertionFailedError: should have thrown IllegalArgumentException
+2) testMove(tests.Test2a)junit.framework.AssertionFailedError: should have thrown IllegalArgumentException
FAILURES!!!
-Tests run: 7, Failures: 3, Errors: 0
+Tests run: 7, Failures: 2, Errors: 0
</PRE></blockquote>
<p> But after compiling in the aspect...
</p>
<blockquote><PRE>
-$ ajc -Xlint -argfile base.lst
+$ ajc -Xlint -argfile base.lst answers/Answer.java
$ java tests.Test2a
.......
-Time: 0.097
+Time: 0.04
OK (7 tests)
</PRE></blockquote>
<p> <strong>Tools:</strong> <code>target</code>
</p>
+<p> AspectJ can expose the target object at a join point for tracing.
+In this exercise, you will print not only the join point information,
+but also the target object, with the form
+</p>
+
+<blockquote><pre>
+<em>thisJoinPointInfo</em> at <em>targetObject</em>
+</pre></blockquote>
+
<h3>c. More specialized logging</h3>