summaryrefslogtreecommitdiffstats
path: root/docs/teaching/exercises/answers
diff options
context:
space:
mode:
Diffstat (limited to 'docs/teaching/exercises/answers')
-rw-r--r--docs/teaching/exercises/answers/Answer2a.java4
-rw-r--r--docs/teaching/exercises/answers/Answer2d.java12
-rw-r--r--docs/teaching/exercises/answers/Answer2e.java20
-rw-r--r--docs/teaching/exercises/answers/Answer2f.java18
-rw-r--r--docs/teaching/exercises/answers/Answer2g.java27
-rw-r--r--docs/teaching/exercises/answers/Answer2h.java31
6 files changed, 35 insertions, 77 deletions
diff --git a/docs/teaching/exercises/answers/Answer2a.java b/docs/teaching/exercises/answers/Answer2a.java
index 12d00d976..9131d54ce 100644
--- a/docs/teaching/exercises/answers/Answer2a.java
+++ b/docs/teaching/exercises/answers/Answer2a.java
@@ -17,10 +17,8 @@ import figures.FigureElement;
public aspect Answer2a {
before(int newValue): set(int Point.*) && args(newValue) {
- if (newValue < FigureElement.MIN_VALUE) {
+ if (newValue < 0) {
throw new IllegalArgumentException("too small");
- } else if (newValue > FigureElement.MAX_VALUE) {
- throw new IllegalArgumentException("too large");
}
}
}
diff --git a/docs/teaching/exercises/answers/Answer2d.java b/docs/teaching/exercises/answers/Answer2d.java
index 3d131ad6b..2d313134d 100644
--- a/docs/teaching/exercises/answers/Answer2d.java
+++ b/docs/teaching/exercises/answers/Answer2d.java
@@ -12,13 +12,13 @@
package answers;
-import figures.SlothfulPoint;
+import figures.*;
aspect Answer2d {
- after(int newValue, SlothfulPoint p) returning:
- call(void setX(int)) && args(newValue) && target(p) {
- if (newValue != p.getX()) {
- throw new RuntimeException("setter didn't set");
- }
+ int around(int val): (set(int Point._x) || set(int Point._y))
+ && args(val) {
+ if (val < 0)
+ val = 0;
+ return proceed(val);
}
}
diff --git a/docs/teaching/exercises/answers/Answer2e.java b/docs/teaching/exercises/answers/Answer2e.java
index 53245b4d0..43112ec89 100644
--- a/docs/teaching/exercises/answers/Answer2e.java
+++ b/docs/teaching/exercises/answers/Answer2e.java
@@ -14,11 +14,21 @@ package answers;
import figures.*;
-public aspect Answer2e {
- pointcut checkpoint(Box box):
- call(void move(int, int)) && target(box);
+import java.awt.Rectangle;
- after(Box box) returning: checkpoint(box) {
- box.checkBoxness();
+aspect Answer2e {
+ void around(Point p, int dx, int dy):
+ target(fe) && call(void move(int, int)) && args(dx, dy) {
+ int preX = p.getX();
+ int preY = p.getY();
+
+ proceed(p, dx, dy);
+
+ int postX = p.getX();
+ int postY = p.getY();
+
+ if ((postX != preX + dx) || (postY != preY + dy)) {
+ throw new IllegalStateException("point didn't move properly");
+ }
}
}
diff --git a/docs/teaching/exercises/answers/Answer2f.java b/docs/teaching/exercises/answers/Answer2f.java
index 5e78dabfc..4431b2742 100644
--- a/docs/teaching/exercises/answers/Answer2f.java
+++ b/docs/teaching/exercises/answers/Answer2f.java
@@ -14,11 +14,19 @@ package answers;
import figures.*;
-public aspect Answer2f {
- pointcut checkpoint(Box box):
- target(box) && call(public * *(..)) && !within(Answer*);
+import java.awt.Rectangle;
- after(Box box) returning: checkpoint(box) {
- box.checkBoxness();
+aspect Answer2f {
+ void around(FigureElement fe, int dx, int dy):
+ target(fe) && call(void move(int, int)) && args(dx, dy) {
+
+ Rectangle preBounds = new Rectangle(fe.getBounds());
+ proceed(fe, dx, dy);
+
+ preBounds.translate(dx, dy);
+
+ if (!preBounds.equals(fe.getBounds())) {
+ throw new IllegalStateException("bounds don't match move");
+ }
}
}
diff --git a/docs/teaching/exercises/answers/Answer2g.java b/docs/teaching/exercises/answers/Answer2g.java
deleted file mode 100644
index edf87c3db..000000000
--- a/docs/teaching/exercises/answers/Answer2g.java
+++ /dev/null
@@ -1,27 +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;
-
-import figures.*;
-
-aspect Answer2g {
- int around(int val): (set(int Point._x) || set(int Point._y))
- && args(val) {
- return proceed(trim(val));
- }
-
- private int trim(int val) {
- return Math.max(Math.min(val, FigureElement.MAX_VALUE),
- FigureElement.MIN_VALUE);
- }
-}
diff --git a/docs/teaching/exercises/answers/Answer2h.java b/docs/teaching/exercises/answers/Answer2h.java
deleted file mode 100644
index ae58fa6c0..000000000
--- a/docs/teaching/exercises/answers/Answer2h.java
+++ /dev/null
@@ -1,31 +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;
-
-import figures.*;
-
-import java.awt.Rectangle;
-
-aspect Answer2h {
- void around(FigureElement fe, int dx, int dy):
- target(fe) && call(void move(int, int)) && args(dx, dy) {
- Rectangle preBounds = new Rectangle(fe.getBounds());
- proceed(fe, dx, dy);
-
- preBounds.translate(dx, dy);
-
- if (!preBounds.equals(fe.getBounds())) {
- throw new IllegalStateException("bounds don't match move");
- }
- }
-}