# HG changeset patch # User Jaroslav Tulach # Date 1213430028 -7200 # Node ID 618b79994cd457aaa50d9b0b469e649e502d2305 # Parent adf4440db8886de15c929d72543240878d7b0655 How to eliminate cyclic dependencies diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/build.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/build.xml Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/nbproject/project.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/nbproject/project.xml Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,116 @@ + + + org.netbeans.modules.ant.freeform + + + preventcyclicdependencies + + + + preventcyclicdependencies + + + + + . + UTF-8 + + + + java + src-cyclic + UTF-8 + + + + java + src-test + UTF-8 + + + + java + src-acyclic1 + UTF-8 + + + + java + src-acyclic2 + UTF-8 + + + + + build + + + clean + + + run + + + clean + build + + + + + + + src-cyclic + + + + src-test + + + + src-acyclic1 + + + + src-acyclic2 + + + build.xml + + + + + + + + + + + + + + + src-cyclic + build/cyclic/classes + 1.5 + + + src-test + src-cyclic + build/test/classes + 1.5 + + + src-acyclic1 + ../libs/dist/org-openide-util.jar + build/acyclic1/classes + 1.5 + + + src-acyclic2 + src-acyclic1 + build/acyclic2/classes + 1.5 + + + + diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-acyclic1/org/apidesign/cycles/array/MutableArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-acyclic1/org/apidesign/cycles/array/MutableArray.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,38 @@ +package org.apidesign.cycles.array; + +import java.io.IOException; +import java.io.OutputStream; +import org.openide.util.Lookup; +// BEGIN: nocycles.ma2 +public class MutableArray { + private byte[] arr; + + public MutableArray(byte[] arr) { + this.arr = arr; + } + + public void xor(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] ^= b; } + } + + public void and(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] &= b; } + } + + public void or(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] |= b; } + } + + public void encrypt(OutputStream os) throws IOException { + DoEncode en = Lookup.getDefault().lookup(DoEncode.class); + assert en != null : "We need org.netbeans.example.crypt to be enabled!"; + byte[] clone = (byte[]) arr.clone(); + en.encode(clone); + os.write(clone); + } + + public interface DoEncode { + public void encode(byte[] arr); + } +} +// END: nocycles.ma2 diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-acyclic2/META-INF/services/org.apidesign.cycles.array.MutableArray$DoEncode --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-acyclic2/META-INF/services/org.apidesign.cycles.array.MutableArray$DoEncode Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,1 @@ +org.apidesign.cycles.crypt.DoEncodeImpl diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-acyclic2/org/apidesign/cycles/crypt/DoEncodeImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-acyclic2/org/apidesign/cycles/crypt/DoEncodeImpl.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,12 @@ +// BEGIN: nocycles.encrypt2 +package org.apidesign.cycles.crypt; + +import org.apidesign.cycles.array.MutableArray; + +public class DoEncodeImpl implements MutableArray.DoEncode { + public void encode(byte[] arr) { + Encryptor en = new Encryptor(); + en.encode(arr); + } +} +// END: nocycles.encrypt2 diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-acyclic2/org/apidesign/cycles/crypt/Encryptor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-acyclic2/org/apidesign/cycles/crypt/Encryptor.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,10 @@ +package org.apidesign.cycles.crypt; + +import org.apidesign.cycles.array.MutableArray; + +public final class Encryptor { + public void encode(byte[] arr) { + MutableArray m = new MutableArray(arr); + m.xor((byte)0x3d); + } +} diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-cyclic/org/apidesign/cycles/array/MutableArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-cyclic/org/apidesign/cycles/array/MutableArray.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,35 @@ +// BEGIN: cycles.ma1 +package org.apidesign.cycles.array; + +import java.io.IOException; +import java.io.OutputStream; +import org.apidesign.cycles.crypt.Encryptor; + +public class MutableArray { + private byte[] arr; + + public MutableArray(byte[] arr) { + this.arr = arr; + } + + public void xor(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] ^= b; } + } + + public void and(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] &= b; } + } + + public void or(byte b) { + for (int i = 0; i < arr.length; i++) { arr[i] |= b; } + } + + public void encrypt(OutputStream os) throws IOException { + Encryptor en = new Encryptor(); + byte[] clone = (byte[]) arr.clone(); + en.encode(clone); + os.write(clone); + } +} +// END: cycles.ma1 + diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-cyclic/org/apidesign/cycles/crypt/Encryptor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-cyclic/org/apidesign/cycles/crypt/Encryptor.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,12 @@ +// BEGIN: cycles.encryptor1 +package org.apidesign.cycles.crypt; + +import org.apidesign.cycles.array.MutableArray; + +public final class Encryptor { + public void encode(byte[] arr) { + MutableArray m = new MutableArray(arr); + m.xor((byte)0x3d); + } +} +// END: cycles.encryptor1 diff -r adf4440db888 -r 618b79994cd4 samples/preventcyclicdependencies/src-test/org/apidesign/cycles/array/test/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/preventcyclicdependencies/src-test/org/apidesign/cycles/array/test/Main.java Sat Jun 14 09:53:48 2008 +0200 @@ -0,0 +1,29 @@ +package org.apidesign.cycles.array.test; + +import org.apidesign.cycles.array.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import org.apidesign.cycles.crypt.Encryptor; + +public class Main { + public static void main(String[] args) throws Exception { + byte[] five = { 1, 2, 3, 4, 5 }; + MutableArray arr = new MutableArray(five); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + arr.encrypt(os); + + byte[] out = os.toByteArray(); + assert out.length == 5; + + for (int i = 0; i < 5; i++) { + int exp = five[i] ^ 0x3d; + if (exp != out[i]) { + assert false : "Index: " + i + " exp: " + exp + " was: " + out[i]; + } + } + System.err.println("OK"); + } +} +