diff options
Diffstat (limited to 'docs/teaching/exercises/answers')
-rw-r--r-- | docs/teaching/exercises/answers/Answer2a.java | 4 | ||||
-rw-r--r-- | docs/teaching/exercises/answers/Answer2d.java | 12 | ||||
-rw-r--r-- | docs/teaching/exercises/answers/Answer2e.java | 20 | ||||
-rw-r--r-- | docs/teaching/exercises/answers/Answer2f.java | 18 | ||||
-rw-r--r-- | docs/teaching/exercises/answers/Answer2g.java | 27 | ||||
-rw-r--r-- | docs/teaching/exercises/answers/Answer2h.java | 31 |
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"); - } - } -} |