There was some mischmash between abstractclass and unknownvisit, hopefully fixing it
1.1 --- a/samples/visitor/abstractclass/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:35 2008 +0200
1.2 +++ b/samples/visitor/abstractclass/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:36 2008 +0200
1.3 @@ -27,13 +27,8 @@
1.4 public void visit(Visitor v) { v.visitNumber(this); }
1.5 }
1.6
1.7 - // BEGIN: visitor.visitunknown.v1
1.8 - public static abstract class Visitor/*1.0*/ {
1.9 - public void visitUnknown(Expression exp) {
1.10 - throw new IllegalStateException("Unknown element faced: " + exp);
1.11 - }
1.12 + public static abstract class Visitor {
1.13 public abstract void visitPlus(Plus s);
1.14 public abstract void visitNumber(Number n);
1.15 }
1.16 - // END: visitor.visitunknown.v1
1.17 }
2.1 --- a/samples/visitor/abstractclass/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:35 2008 +0200
2.2 +++ b/samples/visitor/abstractclass/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:36 2008 +0200
2.3 @@ -26,6 +26,7 @@
2.4 @Override
2.5 public void visit(Visitor v) { v.visitNumber(this); }
2.6 }
2.7 + // BEGIN: visitor.abstractclass.v2
2.8 /** @since 2.0 */
2.9 public static final class Minus extends Expression {
2.10 private final Expression first;
2.11 @@ -42,17 +43,16 @@
2.12 }
2.13 }
2.14
2.15 - // BEGIN: visitor.visitunknown.v2
2.16 - public static abstract class Visitor/*2.0*/ {
2.17 - public void visitUnknown(Expression exp) {
2.18 - throw new IllegalStateException("Unknown element faced: " + exp);
2.19 - }
2.20 + public static abstract class Visitor {
2.21 public abstract void visitPlus(Plus s);
2.22 public abstract void visitNumber(Number n);
2.23 /** @since 2.0 */
2.24 public void visitMinus(Minus s) {
2.25 - visitUnknown(s);
2.26 + throw new IllegalStateException(
2.27 + "Old visitor used on new exceptions"
2.28 + );
2.29 }
2.30 }
2.31 - // END: visitor.visitunknown.v2
2.32 + // END: visitor.abstractclass.v2
2.33 +
2.34 }
3.1 --- a/samples/visitor/visitunknown/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:35 2008 +0200
3.2 +++ b/samples/visitor/visitunknown/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:36 2008 +0200
3.3 @@ -27,8 +27,13 @@
3.4 public void visit(Visitor v) { v.visitNumber(this); }
3.5 }
3.6
3.7 - public static abstract class Visitor {
3.8 + // BEGIN: visitor.visitunknown.v1
3.9 + public static abstract class Visitor/*1.0*/ {
3.10 + public void visitUnknown(Expression exp) {
3.11 + throw new IllegalStateException("Unknown element faced: " + exp);
3.12 + }
3.13 public abstract void visitPlus(Plus s);
3.14 public abstract void visitNumber(Number n);
3.15 }
3.16 + // END: visitor.visitunknown.v1
3.17 }
4.1 --- a/samples/visitor/visitunknown/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:35 2008 +0200
4.2 +++ b/samples/visitor/visitunknown/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:36 2008 +0200
4.3 @@ -26,7 +26,6 @@
4.4 @Override
4.5 public void visit(Visitor v) { v.visitNumber(this); }
4.6 }
4.7 - // BEGIN: visitor.abstractclass.v2
4.8 /** @since 2.0 */
4.9 public static final class Minus extends Expression {
4.10 private final Expression first;
4.11 @@ -42,15 +41,17 @@
4.12 v.visitMinus(this);
4.13 }
4.14 }
4.15 -
4.16 - public static abstract class Visitor {
4.17 + // BEGIN: visitor.visitunknown.v2
4.18 + public static abstract class Visitor/*2.0*/ {
4.19 + public void visitUnknown(Expression exp) {
4.20 + throw new IllegalStateException("Unknown element faced: " + exp);
4.21 + }
4.22 public abstract void visitPlus(Plus s);
4.23 public abstract void visitNumber(Number n);
4.24 + /** @since 2.0 */
4.25 public void visitMinus(Minus s) {
4.26 - throw new IllegalStateException(
4.27 - "Old visitor used on new exceptions"
4.28 - );
4.29 + visitUnknown(s);
4.30 }
4.31 }
4.32 - // END: visitor.abstractclass.v2
4.33 + // END: visitor.visitunknown.v2
4.34 }
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/samples/visitor/visitunknown/src-test/org/apidesign/test/visitor/CountNumbersTest.java Sat Jun 14 09:58:36 2008 +0200
5.3 @@ -0,0 +1,51 @@
5.4 +package org.apidesign.test.visitor;
5.5 +
5.6 +import static junit.framework.Assert.*;
5.7 +import org.apidesign.visitor.Language.Expression;
5.8 +import org.apidesign.visitor.Language.Number;
5.9 +import org.apidesign.visitor.Language.Plus;
5.10 +import org.apidesign.visitor.Language.Visitor;
5.11 +import org.junit.Test;
5.12 +
5.13 +public class CountNumbersTest {
5.14 +
5.15 + // BEGIN: visitor.count.numbers.visitunknown
5.16 + private static class CountNumbers extends Visitor/*version1.0*/ {
5.17 + int cnt;
5.18 +
5.19 + @Override
5.20 + public void visitUnknown(Expression exp) {
5.21 + // not a number
5.22 + }
5.23 + public void visitPlus(Plus s) {
5.24 + s.getFirst().visit(this);
5.25 + s.getSecond().visit(this);
5.26 + }
5.27 + public void visitNumber(Number n) {
5.28 + cnt++;
5.29 + }
5.30 + }
5.31 +
5.32 + public static int countNumbers(Expression expression) {
5.33 + CountNumbers counter = new CountNumbers();
5.34 + expression.visit(counter);
5.35 + return counter.cnt;
5.36 + }
5.37 + // END: visitor.count.numbers.visitunknown
5.38 +
5.39 + @Test public void printOnePlusOne() {
5.40 + Number one = new Number(1);
5.41 + Expression expression = new Plus(one, one);
5.42 +
5.43 + assertEquals("Two 1's", 2, countNumbers(expression));
5.44 + }
5.45 +
5.46 + @Test public void printOnePlusTwoPlusThree() {
5.47 + Number one = new Number(1);
5.48 + Number two = new Number(2);
5.49 + Number three = new Number(3);
5.50 + Expression plus = new Plus(one, new Plus(two, three));
5.51 +
5.52 + assertEquals("Three", 3, countNumbers(plus));
5.53 + }
5.54 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/samples/visitor/visitunknown/src-test2.0/org/apidesign/test/visitor/InvalidCountNumbersTest.java Sat Jun 14 09:58:36 2008 +0200
6.3 @@ -0,0 +1,25 @@
6.4 +package org.apidesign.test.visitor;
6.5 +
6.6 +import static junit.framework.Assert.*;
6.7 +import org.apidesign.visitor.Language.Expression;
6.8 +import org.apidesign.visitor.Language.Minus;
6.9 +import org.apidesign.visitor.Language.Number;
6.10 +import org.apidesign.visitor.Language.Plus;
6.11 +import org.junit.Test;
6.12 +
6.13 +public class InvalidCountNumbersTest {
6.14 + @Test public void printOneMinusTwo() {
6.15 + // BEGIN: visitor.visitunknown.traversal
6.16 + Number one = new Number(1);
6.17 + Number three = new Number(3);
6.18 + Number four = new Number(4);
6.19 + Expression minus = new Plus(one, new Minus(three, four));
6.20 +
6.21 + assertEquals(
6.22 + "Should have three numbers, but visitor does not " +
6.23 + "know how to go through minus",
6.24 + 3, CountNumbersTest.countNumbers(minus)
6.25 + );
6.26 + // END: visitor.visitunknown.traversal
6.27 + }
6.28 +}