# HG changeset patch # User Jaroslav Tulach # Date 1213430356 -7200 # Node ID 0f658628beacc603895f44204356cf7c7e9bc7ab # Parent 7aaa7b256c7ebe22a1336c68af0e2378ea52295c First two versions of client provider Visitor diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/build.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/build.xml Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/nbproject/project.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/nbproject/project.xml Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,107 @@ + + + org.netbeans.modules.ant.freeform + + + clientprovider + + + + clientprovider + + + + + java + src-api1.0 + UTF-8 + + + + java + src-api2.0 + UTF-8 + + + + java + src-test + UTF-8 + + + + java + src-test2.0 + UTF-8 + + + + + build + + + clean + + + test + + + test + + + clean + build + + + + + + + src-api1.0 + + + + src-api2.0 + + + + src-test + + + + src-test2.0 + + + build.xml + + + + + + + + + + + + + src-api1.0 + 1.5 + + + src-api2.0 + 1.5 + + + src-test + src-api1.0:../../libs/dist/junit-4.4.jar + 1.5 + + + src-test2.0 + src-api2.0:src-test:../../libs/dist/junit-4.4.jar + 1.5 + + + + diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/src-api1.0/org/apidesign/visitor/Language.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,49 @@ +package org.apidesign.visitor; + +public final class Language { + private Language() { } + + // BEGIN: visitor.clientprovider.v1 + public interface Expression { + public abstract void visit(Visitor v); + } + public interface Plus extends Expression { + public Expression getFirst(); + public Expression getSecond(); + } + public interface Number extends Expression { + public int getValue(); + } + + public static abstract class Visitor { + Visitor() {} + + public Visitor create(Version1_0 v) { + return create1_0(v); + } + + public interface Version1_0 { + public boolean visitUnknown(Expression e); + public void visitPlus(Plus s); + public void visitNumber(Number n); + } + + public abstract void dispatchPlus(Plus p); + public abstract void dispatchNumber(Number n); + } + // END: visitor.clientprovider.v1 + + static Visitor create1_0(final Visitor.Version1_0 v) { + return new Visitor() { + @Override + public void dispatchPlus(Plus p) { + v.visitPlus(p); + } + + @Override + public void dispatchNumber(Number n) { + v.visitNumber(n); + } + }; + } +} diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/src-api2.0/org/apidesign/visitor/Language.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,93 @@ +package org.apidesign.visitor; + +public final class Language { + private Language() { } + + public interface Expression { + public abstract void visit(Visitor v); + } + public interface Plus extends Expression { + public Expression getFirst(); + public Expression getSecond(); + } + public interface Number extends Expression { + public int getValue(); + } + // BEGIN: visitor.clientprovider.v2 + /** @since 2.0 */ + public interface Minus extends Expression { + public Expression getFirst(); + public Expression getSecond(); + } + + public static abstract class Visitor { + Visitor() {} + /** @since 2.0 */ + public static Visitor create(Version2_0 v) { + return create2_0(v); + } + + /** @since 2.0 */ + public interface Version2_0 extends Version1_0 { + public void visitMinus(Minus m); + } + + + /** @since 2.0 */ + public abstract void dispatchNumber(Number n); + // FINISH: visitor.clientprovider.v2 + + public Visitor create(Version1_0 v) { + return create1_0(v); + } + + public interface Version1_0 { + public boolean visitUnknown(Expression e); + public void visitPlus(Plus s); + public void visitNumber(Number n); + } + + public abstract void dispatchPlus(Plus p); + public abstract void dispatchMinus(Minus m); + } + + static Visitor create1_0(final Visitor.Version1_0 v) { + return new Visitor() { + @Override + public void dispatchPlus(Plus p) { + v.visitPlus(p); + } + + @Override + public void dispatchNumber(Number n) { + v.visitNumber(n); + } + + @Override + public void dispatchMinus(Minus m) { + if (v.visitUnknown(m)) { + m.getFirst().visit(this); + m.getSecond().visit(this); + } + } + }; + } + static Visitor create2_0(final Visitor.Version2_0 v) { + return new Visitor() { + @Override + public void dispatchPlus(Plus p) { + v.visitPlus(p); + } + + @Override + public void dispatchNumber(Number n) { + v.visitNumber(n); + } + + @Override + public void dispatchMinus(Minus m) { + v.visitMinus(m); + } + }; + } +} diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,49 @@ +package org.apidesign.test.visitor; + +import static junit.framework.Assert.*; +import org.apidesign.visitor.notevolutionready.Language.Expression; +import org.apidesign.visitor.notevolutionready.Language.Number; +import org.apidesign.visitor.notevolutionready.Language.Plus; +import org.apidesign.visitor.notevolutionready.Language.Visitor; +import org.junit.Test; + +public class PrintTest { + + // BEGIN: visitor.notevolutionready.print + public static class PrintVisitor implements Visitor { + StringBuffer sb = new StringBuffer(); + + public void visitPlus(Plus s) { + s.getFirst().visit(this); + sb.append(" + "); + s.getSecond().visit(this); + } + + public void visitNumber(Number n) { + sb.append (n.getValue()); + } + } + + @Test public void printOnePlusOne() { + Number one = new Number(1); + Expression plus = new Plus(one, one); + + PrintVisitor print = new PrintVisitor(); + plus.visit(print); + + assertEquals("1 + 1", print.sb.toString()); + } + // END: visitor.notevolutionready.print + + @Test public void printOnePlusTwoPlusThree() { + Number one = new Number(1); + Number two = new Number(2); + Number three = new Number(3); + Expression plus = new Plus(one, new Plus(two, three)); + + PrintVisitor print = new PrintVisitor(); + plus.visit(print); + + assertEquals("1 + 2 + 3", print.sb.toString()); + } +} diff -r 7aaa7b256c7e -r 0f658628beac samples/visitor/21-clientprovider/src-test2.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/visitor/21-clientprovider/src-test2.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java Sat Jun 14 09:59:16 2008 +0200 @@ -0,0 +1,25 @@ +package org.apidesign.test.visitor; + +import org.apidesign.test.visitor.PrintTest.PrintVisitor; +import static junit.framework.Assert.*; +import org.apidesign.visitor.notevolutionready.Language.Expression; +import org.apidesign.visitor.notevolutionready.Language.Minus; +import org.apidesign.visitor.notevolutionready.Language.Number; +import org.apidesign.visitor.notevolutionready.Language.Plus; +import org.apidesign.visitor.notevolutionready.Language.Visitor; +import org.junit.Test; + +public class PrintOfMinusStructureTest { + @Test public void printOneMinusTwo() { + // BEGIN: visitor.notevolutionready.oldwithnew + Number one = new Number(1); + Number two = new Number(2); + Expression plus = new Minus(one, two); + + PrintVisitor print = new PrintVisitor(); + plus.visit(print); // fails with AbstractMethodError + + assertEquals("1 - 2", print.sb.toString()); + // END: visitor.notevolutionready.oldwithnew + } +}