samples/visitor/21-clientprovider/src-api1.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:59:20 +0200
changeset 177 67d6dceb1002
parent 176 0f658628beac
child 266 47d5f1fe0b03
permissions -rw-r--r--
Third version and tests for client provider visitor
     1 package org.apidesign.visitor;
     2 
     3 public final class Language {
     4     private Language() { }
     5     
     6     // BEGIN: visitor.clientprovider.v1
     7     public interface Expression {
     8         public abstract void visit(Visitor v);
     9     }
    10     public interface Plus extends Expression {
    11         public Expression getFirst();
    12         public Expression getSecond();
    13     }
    14     public interface Number extends Expression {
    15         public int getValue();
    16     }
    17 
    18     public static abstract class Visitor {
    19         Visitor() {}
    20 
    21         public static Visitor create(Version1_0 v) {
    22             return create1_0(v);
    23         }
    24 
    25         public interface Version1_0 {
    26             public boolean visitUnknown(Expression e);
    27             public void visitPlus(Plus s);
    28             public void visitNumber(Number n);
    29         }
    30 
    31         public abstract void dispatchPlus(Plus p);
    32         public abstract void dispatchNumber(Number n);
    33     }
    34     // END: visitor.clientprovider.v1
    35     
    36     static Visitor create1_0(final Visitor.Version1_0 v) {
    37         return new Visitor() {
    38             @Override
    39             public void dispatchPlus(Plus p) {
    40                 v.visitPlus(p);
    41             }
    42 
    43             @Override
    44             public void dispatchNumber(Number n) {
    45                 v.visitNumber(n);
    46             }
    47         };
    48     }
    49 }