@@ -1,23 +0,0 @@ | |||
/* ******************************************************************* | |||
* 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"; | |||
} |
@@ -14,10 +14,8 @@ package answers; | |||
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()); | |||
} | |||
} |
@@ -19,8 +19,11 @@ import figures.Group; | |||
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); | |||
} | |||
} |
@@ -14,21 +14,11 @@ package answers; | |||
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"); | |||
} | |||
} |
@@ -106,5 +106,10 @@ | |||
<delete dir="dist" /> | |||
</target> | |||
<target name="javaclean"> | |||
<delete dir="dist" /> | |||
</target> | |||
</project> | |||
@@ -265,29 +265,26 @@ aspect, | |||
</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> | |||
@@ -430,6 +427,15 @@ and call <code>Log.log(String)</code></p> | |||
<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> | |||