1.1 --- a/samples/visitor/21-clientprovider/build.xml Sat Jun 14 09:59:16 2008 +0200
1.2 +++ b/samples/visitor/21-clientprovider/build.xml Sat Jun 14 09:59:20 2008 +0200
1.3 @@ -12,6 +12,9 @@
1.4 <antcall target="-build-one">
1.5 <param name="version" value="api2.0"/>
1.6 </antcall>
1.7 + <antcall target="-build-one">
1.8 + <param name="version" value="api3.0"/>
1.9 + </antcall>
1.10
1.11 <antcall target="-build-one">
1.12 <param name="version" value="test"/>
2.1 --- a/samples/visitor/21-clientprovider/nbproject/project.xml Sat Jun 14 09:59:16 2008 +0200
2.2 +++ b/samples/visitor/21-clientprovider/nbproject/project.xml Sat Jun 14 09:59:20 2008 +0200
2.3 @@ -23,6 +23,12 @@
2.4 <encoding>UTF-8</encoding>
2.5 </source-folder>
2.6 <source-folder>
2.7 + <label>src-api3.0</label>
2.8 + <type>java</type>
2.9 + <location>src-api3.0</location>
2.10 + <encoding>UTF-8</encoding>
2.11 + </source-folder>
2.12 + <source-folder>
2.13 <label>test</label>
2.14 <type>java</type>
2.15 <location>src-test</location>
2.16 @@ -64,6 +70,10 @@
2.17 <location>src-api2.0</location>
2.18 </source-folder>
2.19 <source-folder style="packages">
2.20 + <label>API Version 3.0</label>
2.21 + <location>src-api3.0</location>
2.22 + </source-folder>
2.23 + <source-folder style="packages">
2.24 <label>Usage of the API</label>
2.25 <location>src-test</location>
2.26 </source-folder>
2.27 @@ -93,6 +103,10 @@
2.28 <source-level>1.5</source-level>
2.29 </compilation-unit>
2.30 <compilation-unit>
2.31 + <package-root>src-api3.0</package-root>
2.32 + <source-level>1.5</source-level>
2.33 + </compilation-unit>
2.34 + <compilation-unit>
2.35 <package-root>src-test</package-root>
2.36 <classpath mode="compile">src-api1.0:../../libs/dist/junit-4.4.jar</classpath>
2.37 <source-level>1.5</source-level>
3.1 --- a/samples/visitor/21-clientprovider/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:16 2008 +0200
3.2 +++ b/samples/visitor/21-clientprovider/src-api1.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:20 2008 +0200
3.3 @@ -18,7 +18,7 @@
3.4 public static abstract class Visitor {
3.5 Visitor() {}
3.6
3.7 - public Visitor create(Version1_0 v) {
3.8 + public static Visitor create(Version1_0 v) {
3.9 return create1_0(v);
3.10 }
3.11
4.1 --- a/samples/visitor/21-clientprovider/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:16 2008 +0200
4.2 +++ b/samples/visitor/21-clientprovider/src-api2.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:20 2008 +0200
4.3 @@ -37,7 +37,7 @@
4.4 public abstract void dispatchNumber(Number n);
4.5 // FINISH: visitor.clientprovider.v2
4.6
4.7 - public Visitor create(Version1_0 v) {
4.8 + public static Visitor create(Version1_0 v) {
4.9 return create1_0(v);
4.10 }
4.11
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/samples/visitor/21-clientprovider/src-api3.0/org/apidesign/visitor/Language.java Sat Jun 14 09:59:20 2008 +0200
5.3 @@ -0,0 +1,162 @@
5.4 +package org.apidesign.visitor;
5.5 +
5.6 +public final class Language {
5.7 + private Language() { }
5.8 +
5.9 + public interface Expression {
5.10 + public abstract void visit(Visitor v);
5.11 + }
5.12 + public interface Plus extends Expression {
5.13 + public Expression getFirst();
5.14 + public Expression getSecond();
5.15 + }
5.16 + public interface Number extends Expression {
5.17 + public int getValue();
5.18 + }
5.19 + /** @since 2.0 */
5.20 + public interface Minus extends Expression {
5.21 + public Expression getFirst();
5.22 + public Expression getSecond();
5.23 + }
5.24 +
5.25 + // BEGIN: visitor.clientprovider.v3
5.26 + /** @since 3.0 */
5.27 + public interface Real extends Expression {
5.28 + public double getValue();
5.29 + }
5.30 + public static abstract class Visitor {
5.31 + Visitor() {}
5.32 +
5.33 +
5.34 + /** @since 3.0 */
5.35 + public static Visitor create(Version3_0 v) {
5.36 + return create3_0(v);
5.37 + }
5.38 +
5.39 + /** @since 3.0 */
5.40 + public interface Version3_0 {
5.41 + public boolean visitUnknown(Expression e);
5.42 + public void visitPlus(Plus s);
5.43 + public void visitMinus(Minus s);
5.44 + public void visitReal(Real r);
5.45 + }
5.46 +
5.47 + /** @since 3.0 */
5.48 + public abstract void dispatchReal(Real r);
5.49 +
5.50 + // FINISH: visitor.clientprovider.v3
5.51 + /** @since 2.0 */
5.52 + public static Visitor create(Version2_0 v) {
5.53 + return create2_0(v);
5.54 + }
5.55 +
5.56 + /** @since 2.0 */
5.57 + public interface Version2_0 extends Version1_0 {
5.58 + public void visitMinus(Minus m);
5.59 + }
5.60 +
5.61 +
5.62 + /** @since 2.0 */
5.63 + public abstract void dispatchNumber(Number n);
5.64 +
5.65 + public static Visitor create(Version1_0 v) {
5.66 + return create1_0(v);
5.67 + }
5.68 +
5.69 + public interface Version1_0 {
5.70 + public boolean visitUnknown(Expression e);
5.71 + public void visitPlus(Plus s);
5.72 + public void visitNumber(Number n);
5.73 + }
5.74 +
5.75 + public abstract void dispatchPlus(Plus p);
5.76 + public abstract void dispatchMinus(Minus m);
5.77 + }
5.78 +
5.79 + // BEGIN: visitor.clientprovider.dispatch.v3.l1
5.80 + static Visitor create1_0(final Visitor.Version1_0 v) {
5.81 + return new Visitor() {
5.82 + @Override
5.83 + public void dispatchPlus(Plus p) {
5.84 + v.visitPlus(p);
5.85 + }
5.86 +
5.87 + @Override
5.88 + public void dispatchNumber(Number n) {
5.89 + v.visitNumber(n);
5.90 + }
5.91 +
5.92 + @Override
5.93 + public void dispatchMinus(Minus m) {
5.94 + if (v.visitUnknown(m)) {
5.95 + m.getFirst().visit(this);
5.96 + m.getSecond().visit(this);
5.97 + }
5.98 + }
5.99 +
5.100 + @Override
5.101 + public void dispatchReal(Real r) {
5.102 + v.visitUnknown(r);
5.103 + }
5.104 + };
5.105 + }
5.106 + // END: visitor.clientprovider.dispatch.v3.l1
5.107 + // BEGIN: visitor.clientprovider.dispatch.v3.l2
5.108 + static Visitor create2_0(final Visitor.Version2_0 v) {
5.109 + return new Visitor() {
5.110 + @Override
5.111 + public void dispatchPlus(Plus p) {
5.112 + v.visitPlus(p);
5.113 + }
5.114 +
5.115 + @Override
5.116 + public void dispatchNumber(Number n) {
5.117 + v.visitNumber(n);
5.118 + }
5.119 +
5.120 + @Override
5.121 + public void dispatchMinus(Minus m) {
5.122 + v.visitMinus(m);
5.123 + }
5.124 +
5.125 + @Override
5.126 + public void dispatchReal(Real r) {
5.127 + v.visitUnknown(r);
5.128 + }
5.129 + };
5.130 + }
5.131 + // END: visitor.clientprovider.dispatch.v3.l2
5.132 + // BEGIN: visitor.clientprovider.dispatch.v3.l3
5.133 + static Visitor create3_0(final Visitor.Version3_0 v) {
5.134 + return new Visitor() {
5.135 + @Override
5.136 + public void dispatchReal(Real r) {
5.137 + v.visitReal(r);
5.138 + }
5.139 +
5.140 + @Override
5.141 + public void dispatchNumber(final Number n) {
5.142 + class RealWrapper implements Real {
5.143 + public double getValue() {
5.144 + return n.getValue();
5.145 + }
5.146 + public void visit(Visitor v) {
5.147 + n.visit(v);
5.148 + }
5.149 + }
5.150 + v.visitReal(new RealWrapper());
5.151 + }
5.152 +
5.153 + @Override
5.154 + public void dispatchPlus(Plus p) {
5.155 + v.visitPlus(p);
5.156 + }
5.157 +
5.158 + @Override
5.159 + public void dispatchMinus(Minus m) {
5.160 + v.visitMinus(m);
5.161 + }
5.162 + };
5.163 + }
5.164 + // END: visitor.clientprovider.dispatch.v3.l3
5.165 +}
6.1 --- a/samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java Sat Jun 14 09:59:16 2008 +0200
6.2 +++ b/samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java Sat Jun 14 09:59:20 2008 +0200
6.3 @@ -1,48 +1,83 @@
6.4 package org.apidesign.test.visitor;
6.5
6.6 +import org.apidesign.visitor.Language.Expression;
6.7 +import org.apidesign.visitor.Language.Number;
6.8 +import org.apidesign.visitor.Language.Plus;
6.9 +import org.apidesign.visitor.Language.Visitor;
6.10 +import org.apidesign.visitor.Language.Visitor;
6.11 import static junit.framework.Assert.*;
6.12 -import org.apidesign.visitor.notevolutionready.Language.Expression;
6.13 -import org.apidesign.visitor.notevolutionready.Language.Number;
6.14 -import org.apidesign.visitor.notevolutionready.Language.Plus;
6.15 -import org.apidesign.visitor.notevolutionready.Language.Visitor;
6.16 import org.junit.Test;
6.17
6.18 public class PrintTest {
6.19 +
6.20 + public static Number newNumber(final int value) {
6.21 + return new Number() {
6.22 + public int getValue() {
6.23 + return value;
6.24 + }
6.25
6.26 - // BEGIN: visitor.notevolutionready.print
6.27 - public static class PrintVisitor implements Visitor {
6.28 + public void visit(Visitor v) {
6.29 + v.dispatchNumber(this);
6.30 + }
6.31 + };
6.32 + }
6.33 + public static Plus newPlus(
6.34 + final Expression first, final Expression second
6.35 + ) {
6.36 + return new Plus() {
6.37 + public Expression getFirst() {
6.38 + return first;
6.39 + }
6.40 +
6.41 + public Expression getSecond() {
6.42 + return second;
6.43 + }
6.44 +
6.45 + public void visit(Visitor v) {
6.46 + v.dispatchPlus(this);
6.47 + }
6.48 + };
6.49 + }
6.50 +
6.51 + public static class PrintVisitor implements Visitor.Version1_0 {
6.52 StringBuffer sb = new StringBuffer();
6.53
6.54 + final Visitor dispatch = Visitor.create(this);
6.55 +
6.56 public void visitPlus(Plus s) {
6.57 - s.getFirst().visit(this);
6.58 + s.getFirst().visit(dispatch);
6.59 sb.append(" + ");
6.60 - s.getSecond().visit(this);
6.61 + s.getSecond().visit(dispatch);
6.62 }
6.63
6.64 public void visitNumber(Number n) {
6.65 sb.append (n.getValue());
6.66 }
6.67 +
6.68 + public boolean visitUnknown(Expression e) {
6.69 + sb.append("unknown");
6.70 + return true;
6.71 + }
6.72 }
6.73
6.74 @Test public void printOnePlusOne() {
6.75 - Number one = new Number(1);
6.76 - Expression plus = new Plus(one, one);
6.77 + Number one = newNumber(1);
6.78 + Expression plus = newPlus(one, one);
6.79
6.80 PrintVisitor print = new PrintVisitor();
6.81 - plus.visit(print);
6.82 + plus.visit(print.dispatch);
6.83
6.84 assertEquals("1 + 1", print.sb.toString());
6.85 }
6.86 - // END: visitor.notevolutionready.print
6.87
6.88 @Test public void printOnePlusTwoPlusThree() {
6.89 - Number one = new Number(1);
6.90 - Number two = new Number(2);
6.91 - Number three = new Number(3);
6.92 - Expression plus = new Plus(one, new Plus(two, three));
6.93 + Number one = newNumber(1);
6.94 + Number two = newNumber(2);
6.95 + Number three = newNumber(3);
6.96 + Expression plus = newPlus(one, newPlus(two, three));
6.97
6.98 PrintVisitor print = new PrintVisitor();
6.99 - plus.visit(print);
6.100 + plus.visit(print.dispatch);
6.101
6.102 assertEquals("1 + 2 + 3", print.sb.toString());
6.103 }
7.1 --- a/samples/visitor/21-clientprovider/src-test2.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java Sat Jun 14 09:59:16 2008 +0200
7.2 +++ b/samples/visitor/21-clientprovider/src-test2.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java Sat Jun 14 09:59:20 2008 +0200
7.3 @@ -1,25 +1,41 @@
7.4 package org.apidesign.test.visitor;
7.5
7.6 import org.apidesign.test.visitor.PrintTest.PrintVisitor;
7.7 +import org.apidesign.visitor.Language.Expression;
7.8 +import org.apidesign.visitor.Language.Minus;
7.9 +import org.apidesign.visitor.Language.Number;
7.10 import static junit.framework.Assert.*;
7.11 -import org.apidesign.visitor.notevolutionready.Language.Expression;
7.12 -import org.apidesign.visitor.notevolutionready.Language.Minus;
7.13 -import org.apidesign.visitor.notevolutionready.Language.Number;
7.14 -import org.apidesign.visitor.notevolutionready.Language.Plus;
7.15 -import org.apidesign.visitor.notevolutionready.Language.Visitor;
7.16 +import org.apidesign.visitor.Language.Visitor;
7.17 import org.junit.Test;
7.18
7.19 public class PrintOfMinusStructureTest {
7.20 + public static Minus newMinus(
7.21 + final Expression first, final Expression second
7.22 + ) {
7.23 + return new Minus() {
7.24 + public Expression getFirst() {
7.25 + return first;
7.26 + }
7.27 +
7.28 + public Expression getSecond() {
7.29 + return second;
7.30 + }
7.31 +
7.32 + public void visit(Visitor v) {
7.33 + v.dispatchMinus(this);
7.34 + }
7.35 + };
7.36 + }
7.37 +
7.38 +
7.39 @Test public void printOneMinusTwo() {
7.40 - // BEGIN: visitor.notevolutionready.oldwithnew
7.41 - Number one = new Number(1);
7.42 - Number two = new Number(2);
7.43 - Expression plus = new Minus(one, two);
7.44 + Number one = PrintTest.newNumber(1);
7.45 + Number two = PrintTest.newNumber(2);
7.46 + Expression plus = newMinus(one, two);
7.47
7.48 PrintVisitor print = new PrintVisitor();
7.49 - plus.visit(print); // fails with AbstractMethodError
7.50 + plus.visit(print.dispatch);
7.51
7.52 assertEquals("1 - 2", print.sb.toString());
7.53 - // END: visitor.notevolutionready.oldwithnew
7.54 }
7.55 }