1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/visitor/11-cleanversion/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:58:52 2008 +0200
1.3 @@ -0,0 +1,63 @@
1.4 +package org.apidesign.visitor;
1.5 +
1.6 +public final class Language {
1.7 + private Language() { }
1.8 +
1.9 + public static abstract class Expression {
1.10 + public abstract void visit(Visitor v);
1.11 + }
1.12 + public static final class Plus extends Expression {
1.13 + private final Expression first;
1.14 + private final Expression second;
1.15 +
1.16 + public Plus(Expression first, Expression second) {
1.17 + this.first = first;
1.18 + this.second = second;
1.19 + }
1.20 + public Expression getFirst() { return first; }
1.21 + public Expression getSecond() { return second; }
1.22 + @Override
1.23 + public void visit(Visitor v) { v.visitPlus(this); }
1.24 + }
1.25 + public static final class Number extends Expression {
1.26 + private final int value;
1.27 + public Number(int value) { this.value = value; }
1.28 + public int getValue() { return value; }
1.29 + @Override
1.30 + public void visit(Visitor v) { v.visitNumber(this); }
1.31 + }
1.32 + /** @since 2.0 */
1.33 + public static final class Minus extends Expression {
1.34 + private final Expression first;
1.35 + private final Expression second;
1.36 +
1.37 + public Minus(Expression first, Expression second) {
1.38 + this.first = first;
1.39 + this.second = second;
1.40 + }
1.41 + public Expression getFirst() { return first; }
1.42 + public Expression getSecond() { return second; }
1.43 +
1.44 + // BEGIN: visitor.cleanversion.dispatch2
1.45 + public void visit(Visitor v) {
1.46 + if (v instanceof Visitor2_0) {
1.47 + ((Visitor2_0)v).visitMinus(this);
1.48 + } else {
1.49 + v.visitUnknown(this);
1.50 + }
1.51 + }
1.52 + // END: visitor.cleanversion.dispatch2
1.53 + }
1.54 +
1.55 + // BEGIN: visitor.cleanversion.v2
1.56 + public interface Visitor {
1.57 + public void visitUnknown(Expression e);
1.58 + public void visitPlus(Plus s);
1.59 + public void visitNumber(Number n);
1.60 + }
1.61 + /** @since 2.0 */
1.62 + public interface Visitor2_0 extends Visitor {
1.63 + public void visitMinus(Minus s);
1.64 + }
1.65 + // END: visitor.cleanversion.v2
1.66 +}