samples/visitor/11-cleanversion/src-api2.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 30 Oct 2014 21:30:10 +0100
changeset 409 40cabcdcd2be
parent 170 206cdfeefeec
permissions -rw-r--r--
Updating to NBMs from NetBeans 8.0.1 as some of them are required to run on JDK8
     1 package org.apidesign.visitor;
     2 
     3 public final class Language {
     4 
     5     private Language() {
     6     }
     7 
     8     public static abstract class Expression {
     9 
    10         Expression() {
    11         }
    12 
    13         public abstract void visit(Visitor v);
    14     }
    15 
    16     public static final class Plus extends Expression {
    17 
    18         private final Expression first;
    19         private final Expression second;
    20 
    21         public Plus(Expression first, Expression second) {
    22             this.first = first;
    23             this.second = second;
    24         }
    25 
    26         public Expression getFirst() {
    27             return first;
    28         }
    29 
    30         public Expression getSecond() {
    31             return second;
    32         }
    33 
    34         @Override
    35         public void visit(Visitor v) {
    36             if (v instanceof Visitor10) {
    37                 ((Visitor10) v).visitPlus(this);
    38             } else {
    39                 v.visitUnknown(this);
    40             }
    41         }
    42     }
    43 
    44     public static final class Number extends Expression {
    45 
    46         private final int value;
    47 
    48         public Number(int value) {
    49             this.value = value;
    50         }
    51 
    52         public int getValue() {
    53             return value;
    54         }
    55 
    56         @Override
    57         public void visit(Visitor v) {
    58             if (v instanceof Visitor10) {
    59                 ((Visitor10) v).visitNumber(this);
    60             } else {
    61                 v.visitUnknown(this);
    62             }
    63         }
    64     }
    65 
    66     /** @since 2.0 */
    67     public static final class Minus extends Expression {
    68         private final Expression first;
    69         private final Expression second;
    70         
    71         public Minus(Expression first, Expression second) {
    72             this.first = first;
    73             this.second = second;
    74         }
    75         public Expression getFirst() { return first; }
    76         public Expression getSecond() { return second; }
    77         
    78         // BEGIN: visitor.cleanversion.dispatch2
    79         public void visit(Visitor v) { 
    80             if (v instanceof Visitor20) {
    81                 ((Visitor20)v).visitMinus(this);
    82             } else {
    83                 v.visitUnknown(this);
    84             }
    85         }
    86         // END: visitor.cleanversion.dispatch2
    87     }
    88 
    89     // BEGIN: visitor.cleanversion.v2
    90     public interface Visitor {
    91         public void visitUnknown(Expression e);
    92     }
    93     public interface Visitor10 extends Visitor {
    94         public void visitPlus(Plus s);
    95         public void visitNumber(Number n);
    96     }
    97     /** @since 2.0 */
    98     public interface Visitor20 extends Visitor10 {
    99         public void visitMinus(Minus s);
   100     }
   101     // END: visitor.cleanversion.v2
   102 }