samples/visitor/21-clientprovider/src-api1.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 177 67d6dceb1002
permissions -rw-r--r--
Updating to NBMs from NetBeans 8.0.1 as some of them are required to run on JDK8
jtulach@176
     1
package org.apidesign.visitor;
jtulach@176
     2
jtulach@176
     3
public final class Language {
jtulach@176
     4
    private Language() { }
jtulach@176
     5
    
jtulach@176
     6
    // BEGIN: visitor.clientprovider.v1
jtulach@176
     7
    public interface Expression {
jtulach@176
     8
        public abstract void visit(Visitor v);
jtulach@176
     9
    }
jtulach@176
    10
    public interface Plus extends Expression {
jtulach@176
    11
        public Expression getFirst();
jtulach@176
    12
        public Expression getSecond();
jtulach@176
    13
    }
jtulach@176
    14
    public interface Number extends Expression {
jtulach@176
    15
        public int getValue();
jtulach@176
    16
    }
jtulach@176
    17
jtulach@176
    18
    public static abstract class Visitor {
jtulach@176
    19
        Visitor() {}
jtulach@176
    20
jtulach@266
    21
        public static Visitor create(Version10 v) {
jtulach@266
    22
            return create10(v);
jtulach@176
    23
        }
jtulach@176
    24
jtulach@266
    25
        public interface Version10 {
jtulach@176
    26
            public boolean visitUnknown(Expression e);
jtulach@176
    27
            public void visitPlus(Plus s);
jtulach@176
    28
            public void visitNumber(Number n);
jtulach@176
    29
        }
jtulach@176
    30
jtulach@176
    31
        public abstract void dispatchPlus(Plus p);
jtulach@176
    32
        public abstract void dispatchNumber(Number n);
jtulach@176
    33
    }
jtulach@176
    34
    // END: visitor.clientprovider.v1
jtulach@176
    35
    
jtulach@266
    36
    static Visitor create10(final Visitor.Version10 v) {
jtulach@176
    37
        return new Visitor() {
jtulach@176
    38
            @Override
jtulach@176
    39
            public void dispatchPlus(Plus p) {
jtulach@176
    40
                v.visitPlus(p);
jtulach@176
    41
            }
jtulach@176
    42
jtulach@176
    43
            @Override
jtulach@176
    44
            public void dispatchNumber(Number n) {
jtulach@176
    45
                v.visitNumber(n);
jtulach@176
    46
            }
jtulach@176
    47
        };
jtulach@176
    48
    }
jtulach@176
    49
}