samples/visitor/11-cleanversion/src-api1.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 03 Apr 2020 16:32:36 +0200
changeset 416 9ed8788a1a4e
parent 266 47d5f1fe0b03
permissions -rw-r--r--
Using HTTPS to download the libraries
     1 package org.apidesign.visitor;
     2 
     3 
     4 // BEGIN: visitor.cleandefinitionofversion
     5 public final class Language {
     6     private Language() { }
     7     
     8     public static abstract class Expression {
     9         Expression() {}
    10         public abstract void visit(Visitor v);
    11     }
    12     public static final class Plus extends Expression {
    13         private final Expression first;
    14         private final Expression second;
    15         
    16         public Plus(Expression first, Expression second) {
    17             this.first = first;
    18             this.second = second;
    19         }
    20         public Expression getFirst() { return first; }
    21         public Expression getSecond() { return second; }
    22         @Override
    23         public void visit(Visitor v) { 
    24             if (v instanceof Visitor10) {
    25                 ((Visitor10)v).visitPlus(this);
    26             } else {
    27                 v.visitUnknown(this);
    28             }
    29         }
    30     }
    31     public static final class Number extends Expression {
    32         private final int value;
    33         public Number(int value) { this.value = value; }
    34         public int getValue() { return value; }
    35         @Override
    36         public void visit(Visitor v) { 
    37             if (v instanceof Visitor10) {
    38                 ((Visitor10)v).visitNumber(this);
    39             } else {
    40                 v.visitUnknown(this);
    41             }
    42         }
    43     }
    44 
    45     public interface Visitor {
    46         public void visitUnknown(Expression e);
    47     }
    48     
    49     public interface Visitor10 extends Visitor {
    50         public void visitPlus(Plus s);
    51         public void visitNumber(Number n);
    52     }
    53 }
    54 // END: visitor.cleandefinitionofversion