1 package org.apidesign.visitor;
3 public final class Language {
6 public interface Expression {
7 public abstract void visit(Visitor v);
9 public interface Plus extends Expression {
10 public Expression getFirst();
11 public Expression getSecond();
13 public interface Number extends Expression {
14 public int getValue();
16 // BEGIN: visitor.clientprovider.v2
18 public interface Minus extends Expression {
19 public Expression getFirst();
20 public Expression getSecond();
23 public static abstract class Visitor {
26 public static Visitor create(Version20 v) {
31 public interface Version20 extends Version10 {
32 public void visitMinus(Minus m);
37 public abstract void dispatchNumber(Number n);
38 // FINISH: visitor.clientprovider.v2
40 public static Visitor create(Version10 v) {
44 public interface Version10 {
45 public boolean visitUnknown(Expression e);
46 public void visitPlus(Plus s);
47 public void visitNumber(Number n);
50 public abstract void dispatchPlus(Plus p);
51 public abstract void dispatchMinus(Minus m);
54 static Visitor create10(final Visitor.Version10 v) {
55 return new Visitor() {
57 public void dispatchPlus(Plus p) {
62 public void dispatchNumber(Number n) {
67 public void dispatchMinus(Minus m) {
68 if (v.visitUnknown(m)) {
69 m.getFirst().visit(this);
70 m.getSecond().visit(this);
75 static Visitor create20(final Visitor.Version20 v) {
76 return new Visitor() {
78 public void dispatchPlus(Plus p) {
83 public void dispatchNumber(Number n) {
88 public void dispatchMinus(Minus m) {