samples/visitor/21-clientprovider/src-api2.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sun, 06 Oct 2013 22:05:14 +0200
changeset 407 e1439046d96e
parent 177 67d6dceb1002
permissions -rw-r--r--
Looks like scala change URLs of its releases
     1 package org.apidesign.visitor;
     2 
     3 public final class Language {
     4     private Language() { }
     5     
     6     public interface Expression {
     7         public abstract void visit(Visitor v);
     8     }
     9     public interface Plus extends Expression {
    10         public Expression getFirst();
    11         public Expression getSecond();
    12     }
    13     public interface Number extends Expression {
    14         public int getValue();
    15     }
    16     // BEGIN: visitor.clientprovider.v2
    17     /** @since 2.0 */
    18     public interface Minus extends Expression {
    19         public Expression getFirst();
    20         public Expression getSecond();
    21     }
    22     
    23     public static abstract class Visitor {
    24         Visitor() {}
    25         /** @since 2.0 */
    26         public static Visitor create(Version20 v) {
    27             return create20(v);
    28         }
    29 
    30         /** @since 2.0 */
    31         public interface Version20 extends Version10 {
    32             public void visitMinus(Minus m);
    33         }
    34 
    35 
    36         /** @since 2.0 */
    37         public abstract void dispatchNumber(Number n);
    38     // FINISH: visitor.clientprovider.v2
    39         
    40         public static Visitor create(Version10 v) {
    41             return create10(v);
    42         }
    43 
    44         public interface Version10 {
    45             public boolean visitUnknown(Expression e);
    46             public void visitPlus(Plus s);
    47             public void visitNumber(Number n);
    48         }
    49 
    50         public abstract void dispatchPlus(Plus p);
    51         public abstract void dispatchMinus(Minus m);
    52     }
    53     
    54     static Visitor create10(final Visitor.Version10 v) {
    55         return new Visitor() {
    56             @Override
    57             public void dispatchPlus(Plus p) {
    58                 v.visitPlus(p);
    59             }
    60 
    61             @Override
    62             public void dispatchNumber(Number n) {
    63                 v.visitNumber(n);
    64             }
    65 
    66             @Override
    67             public void dispatchMinus(Minus m) {
    68                 if (v.visitUnknown(m)) {
    69                     m.getFirst().visit(this);
    70                     m.getSecond().visit(this);
    71                 }
    72             }
    73         };
    74     }
    75     static Visitor create20(final Visitor.Version20 v) {
    76         return new Visitor() {
    77             @Override
    78             public void dispatchPlus(Plus p) {
    79                 v.visitPlus(p);
    80             }
    81 
    82             @Override
    83             public void dispatchNumber(Number n) {
    84                 v.visitNumber(n);
    85             }
    86 
    87             @Override
    88             public void dispatchMinus(Minus m) {
    89                 v.visitMinus(m);
    90             }
    91         };
    92     }
    93 }