1.1 --- a/samples/sidemeanings/src/org/apidesign/sidemeanings/Protected.java Sun Feb 15 15:42:28 2009 +0100
1.2 +++ b/samples/sidemeanings/src/org/apidesign/sidemeanings/Protected.java Wed Mar 25 22:14:46 2009 +0100
1.3 @@ -1,24 +1,40 @@
1.4 package org.apidesign.sidemeanings;
1.5
1.6 -public final class Protected {
1.7 - private Protected() {}
1.8 +public abstract class Protected {
1.9 + int counter;
1.10 +
1.11 + Protected() {}
1.12 +
1.13 + protected void increment() {
1.14 + counter++;
1.15 + }
1.16 +
1.17 + public final void incrementTenTimes() {
1.18 + for (int i = 0; i < 10; i++) {
1.19 + increment();
1.20 + }
1.21 + }
1.22 +
1.23 + public final void assertCounter(int expected) {
1.24 + assert expected == counter : "Expected " + expected + " but was " + counter;
1.25 + }
1.26
1.27
1.28 - public class Dirty {
1.29 + public static class Dirty extends Protected {
1.30 // BEGIN: sidemeanings.Protected.Dirty
1.31 - protected void method() {
1.32 - someCode();
1.33 + protected void increment() {
1.34 + // implementation:
1.35 + counter++;
1.36 }
1.37 // END: sidemeanings.Protected.Dirty
1.38 - private void someCode() {
1.39 - }
1.40 }
1.41
1.42
1.43 - public abstract class Clean {
1.44 + public static abstract class Clean extends Protected {
1.45 // BEGIN: sidemeanings.Protected.Clean
1.46 - protected abstract void method();
1.47 - protected final void someCode() {
1.48 + protected abstract void increment();
1.49 + protected final void defaultIncrement() {
1.50 + counter++;
1.51 }
1.52 // END: sidemeanings.Protected.Clean
1.53 }
2.1 --- a/samples/sidemeanings/src/org/apidesign/sidemeanings/Public.java Sun Feb 15 15:42:28 2009 +0100
2.2 +++ b/samples/sidemeanings/src/org/apidesign/sidemeanings/Public.java Wed Mar 25 22:14:46 2009 +0100
2.3 @@ -1,27 +1,41 @@
2.4 package org.apidesign.sidemeanings;
2.5
2.6 -public final class Public {
2.7 - private Public() {}
2.8 +public abstract class Public {
2.9 + int counter;
2.10 +
2.11 + Public() {}
2.12 +
2.13 + public abstract void increment();
2.14 +
2.15 + public final void incrementTenTimes() {
2.16 + for (int i = 0; i < 10; i++) {
2.17 + increment();
2.18 + }
2.19 + }
2.20 +
2.21 + public final void assertCounter(int expected) {
2.22 + assert expected == counter : "Expected " + expected + " but was " + counter;
2.23 + }
2.24
2.25
2.26 - public abstract class Dirty {
2.27 + public static abstract class Dirty extends Public {
2.28 // BEGIN: sidemeanings.Public.Dirty
2.29 - public void method() {
2.30 - someCode();
2.31 + public void increment() {
2.32 + // internal implementation
2.33 + counter++;
2.34 }
2.35 // END: sidemeanings.Public.Dirty
2.36 - private void someCode() {
2.37 - }
2.38 }
2.39
2.40
2.41 - public abstract class Clean {
2.42 + public static abstract class Clean extends Public {
2.43 // BEGIN: sidemeanings.Public.Clean
2.44 - public final void method() {
2.45 - methodImpl();
2.46 + public final void increment() {
2.47 + overridableIncrement();
2.48 }
2.49 - protected abstract void methodImpl();
2.50 - protected final void someCode() {
2.51 + protected abstract void overridableIncrement();
2.52 + protected final void defaultIncrement() {
2.53 + counter++;
2.54 }
2.55 // END: sidemeanings.Public.Clean
2.56 }
3.1 --- a/samples/sidemeanings/src/org/apidesign/sidemeanings/PublicAbstract.java Sun Feb 15 15:42:28 2009 +0100
3.2 +++ b/samples/sidemeanings/src/org/apidesign/sidemeanings/PublicAbstract.java Wed Mar 25 22:14:46 2009 +0100
3.3 @@ -1,22 +1,29 @@
3.4 package org.apidesign.sidemeanings;
3.5
3.6 -public final class PublicAbstract {
3.7 - private PublicAbstract() {}
3.8 +public abstract class PublicAbstract {
3.9 + PublicAbstract() {}
3.10
3.11 -
3.12 - public abstract class Dirty {
3.13 + public abstract void increment();
3.14 +
3.15 + public final void incrementTenTimes() {
3.16 + for (int i = 0; i < 10; i++) {
3.17 + increment();
3.18 + }
3.19 + }
3.20 +
3.21 + public static abstract class Dirty extends PublicAbstract {
3.22 // BEGIN: sidemeanings.PublicAbstract.Dirty
3.23 - public abstract void method();
3.24 + public abstract void increment();
3.25 // END: sidemeanings.PublicAbstract.Dirty
3.26 }
3.27
3.28
3.29 - public abstract class Clean {
3.30 + public static abstract class Clean extends PublicAbstract {
3.31 // BEGIN: sidemeanings.PublicAbstract.Clean
3.32 - public final void method() {
3.33 - methodImpl();
3.34 + public final void increment() {
3.35 + overridableIncrement();
3.36 }
3.37 - protected abstract void methodImpl();
3.38 + protected abstract void overridableIncrement();
3.39 // END: sidemeanings.PublicAbstract.Clean
3.40 }
3.41 }
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/samples/sidemeanings/test/org/apidesign/sidemeanings/test/ProtectedTest.java Wed Mar 25 22:14:46 2009 +0100
4.3 @@ -0,0 +1,40 @@
4.4 +package org.apidesign.sidemeanings.test;
4.5 +
4.6 +import org.apidesign.sidemeanings.Protected;
4.7 +import org.junit.Test;
4.8 +
4.9 +public class ProtectedTest {
4.10 +
4.11 + @Test public void testCallTenDoubleIncrementOnDirtyAPI() {
4.12 + // BEGIN: sidemeanings.Protected.Dirty.test
4.13 + class DoubleIncrement extends Protected.Dirty {
4.14 + @Override
4.15 + protected void increment() {
4.16 + super.increment();
4.17 + super.increment();
4.18 + }
4.19 + }
4.20 + DoubleIncrement doubleIncr = new DoubleIncrement();
4.21 + doubleIncr.incrementTenTimes();
4.22 + doubleIncr.assertCounter(20);
4.23 + // END: sidemeanings.Protected.Dirty.test
4.24 + }
4.25 +
4.26 + @Test public void testCallTenDoubleIncrementOnCleanAPI() {
4.27 + // BEGIN: sidemeanings.Protected.Clean.test
4.28 + class DoubleIncrement extends Protected.Clean {
4.29 + @Override
4.30 + protected void increment() {
4.31 + // cannot be access directly, it is abstract:
4.32 + // super.increment();
4.33 + // we need to call default implementation instead
4.34 + defaultIncrement();
4.35 + defaultIncrement();
4.36 + }
4.37 + }
4.38 + DoubleIncrement doubleIncr = new DoubleIncrement();
4.39 + doubleIncr.incrementTenTimes();
4.40 + doubleIncr.assertCounter(20);
4.41 + // END: sidemeanings.Protected.Clean.test
4.42 + }
4.43 +}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/samples/sidemeanings/test/org/apidesign/sidemeanings/test/PublicAbstractTest.java Wed Mar 25 22:14:46 2009 +0100
5.3 @@ -0,0 +1,41 @@
5.4 +package org.apidesign.sidemeanings.test;
5.5 +
5.6 +import org.apidesign.sidemeanings.PublicAbstract;
5.7 +import org.junit.Assert;
5.8 +import org.junit.Test;
5.9 +
5.10 +public class PublicAbstractTest {
5.11 +
5.12 + @Test public void testCallTenDoubleIncrementOnDirtyAPI() {
5.13 + // BEGIN: sidemeanings.PublicAbstract.Dirty.test
5.14 + class DoubleIncrement extends PublicAbstract.Dirty {
5.15 + int counter;
5.16 +
5.17 + @Override
5.18 + public void increment() {
5.19 + counter += 2;
5.20 + }
5.21 + }
5.22 + DoubleIncrement doubleIncr = new DoubleIncrement();
5.23 + doubleIncr.incrementTenTimes();
5.24 + Assert.assertEquals(20, doubleIncr.counter);
5.25 + // END: sidemeanings.PublicAbstract.Dirty.test
5.26 + }
5.27 +
5.28 + @Test public void testCallTenDoubleIncrementOnCleanAPI() {
5.29 + // BEGIN: sidemeanings.PublicAbstract.Clean.test
5.30 + class DoubleIncrement extends PublicAbstract.Clean {
5.31 + int counter;
5.32 +
5.33 + @Override
5.34 + protected void overridableIncrement() {
5.35 + counter += 2;
5.36 + }
5.37 + }
5.38 + DoubleIncrement doubleIncr = new DoubleIncrement();
5.39 + doubleIncr.incrementTenTimes();
5.40 + Assert.assertEquals(20, doubleIncr.counter);
5.41 + // END: sidemeanings.PublicAbstract.Clean.test
5.42 + }
5.43 +
5.44 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/samples/sidemeanings/test/org/apidesign/sidemeanings/test/PublicTest.java Wed Mar 25 22:14:46 2009 +0100
6.3 @@ -0,0 +1,38 @@
6.4 +package org.apidesign.sidemeanings.test;
6.5 +
6.6 +import org.apidesign.sidemeanings.Public;
6.7 +import org.junit.Test;
6.8 +
6.9 +public class PublicTest {
6.10 +
6.11 + @Test public void testCallTenDoubleIncrementOnDirtyAPI() {
6.12 + // BEGIN: sidemeanings.Public.Dirty.test
6.13 + class DoubleIncrement extends Public.Dirty {
6.14 + @Override
6.15 + public void increment() {
6.16 + super.increment();
6.17 + super.increment();
6.18 + }
6.19 + }
6.20 + DoubleIncrement doubleIncr = new DoubleIncrement();
6.21 + doubleIncr.incrementTenTimes();
6.22 + doubleIncr.assertCounter(20);
6.23 + // END: sidemeanings.Public.Dirty.test
6.24 + }
6.25 +
6.26 + @Test public void testCallTenDoubleIncrementOnCleanAPI() {
6.27 + // BEGIN: sidemeanings.Public.Clean.test
6.28 + class DoubleIncrement extends Public.Clean {
6.29 + @Override
6.30 + protected void overridableIncrement() {
6.31 + defaultIncrement();
6.32 + defaultIncrement();
6.33 + }
6.34 + }
6.35 + DoubleIncrement doubleIncr = new DoubleIncrement();
6.36 + doubleIncr.incrementTenTimes();
6.37 + doubleIncr.assertCounter(20);
6.38 + // END: sidemeanings.Public.Clean.test
6.39 + }
6.40 +
6.41 +}