From f6a37b9bd82ad3aa8dffa883e5316bef27ffc9f7 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Thu, 23 Feb 2012 20:13:02 +0200 Subject: [PATCH] serialization of functions and tuples --- stdlib/src/jet/DefaultJetObject.java | 4 +- stdlib/src/jet/Function0.java | 64 ------------------- .../test/concurrent/SerialFunAndTupleTest.kt | 32 ++++++++++ 3 files changed, 35 insertions(+), 65 deletions(-) create mode 100644 testlib/test/concurrent/SerialFunAndTupleTest.kt diff --git a/stdlib/src/jet/DefaultJetObject.java b/stdlib/src/jet/DefaultJetObject.java index 3666b8963e4..a2cfa082092 100644 --- a/stdlib/src/jet/DefaultJetObject.java +++ b/stdlib/src/jet/DefaultJetObject.java @@ -16,10 +16,12 @@ package jet; +import java.io.Serializable; + /** * @author alex.tkachman */ -public class DefaultJetObject { +public class DefaultJetObject implements Serializable { protected DefaultJetObject() { } } diff --git a/stdlib/src/jet/Function0.java b/stdlib/src/jet/Function0.java index 852720707a9..1e007ea1140 100644 --- a/stdlib/src/jet/Function0.java +++ b/stdlib/src/jet/Function0.java @@ -26,68 +26,4 @@ public abstract class Function0 extends DefaultJetObject { public String toString() { return "{() : R}"; } - -// public static void main(String[] args) throws IOException { -// for(int i = 1; i <= 22; i++) { -// PrintStream out = new PrintStream(new File("/Development/Dev.Git/jet/stdlib/src/jet/Function" + i + ".java")); -// out.print("/*\n" + -// " * @author alex.tkachman\n" + -// " */\n" + -// "package jet;\n" + -// "\n" + -// "import jet.TypeInfo;\n" + -// "public abstract class Function" + i + "<"); -// for(int k = 1; k <= i; k++) -// out.print("D" + k + ", "); -// out.println("R> extends DefaultJetObject {\n" + -// " protected Function" + i + "(TypeInfo typeInfo) {\n" + -// " super(typeInfo);\n" + -// " }"); -// -// out.print("\n public abstract R invoke("); -// for(int k = 1; k <= i; k++) -// out.print("D" + k + " d" + k + (k != i ? ", " : ");\n\n")); -// -// out.println(" @Override\n" + -// " public String toString() {"); -// out.print(" return \"{("); -// for(int k = 1; k <= i; k++) -// out.print("d" + k + ": D" + k + (k != i ? ", " : ") : R)}\";\n")); -// out.println(" }"); -// -// out.println("}\n"); -// out.close(); -// } -// -// for(int i = 1; i <= 22; i++) { -// PrintStream out = new PrintStream(new File("/Development/Dev.Git/jet/stdlib/src/jet/ExtensionFunction" + i + ".java")); -// out.print("/*\n" + -// " * @author alex.tkachman\n" + -// " */\n" + -// "package jet;\n" + -// "\n" + -// "import jet.TypeInfo;\n" + -// "public abstract class ExtensionFunction" + i + " extends DefaultJetObject {\n" + -// " protected ExtensionFunction" + i + "(TypeInfo typeInfo) {\n" + -// " super(typeInfo);\n" + -// " }"); -// -// out.print("\n public abstract R invoke(E receiver, "); -// for(int k = 1; k <= i; k++) -// out.print("D" + k + " d" + k + (k != i ? ", " : ");\n\n")); -// -// out.println(" @Override\n" + -// " public String toString() {"); -// out.print(" return \"{E.("); -// for(int k = 1; k <= i; k++) -// out.print("d" + k + ": D" + k + (k != i ? ", " : ") : R)}\";\n")); -// out.println(" }"); -// -// out.println("}\n"); -// out.close(); -// } -// } } diff --git a/testlib/test/concurrent/SerialFunAndTupleTest.kt b/testlib/test/concurrent/SerialFunAndTupleTest.kt new file mode 100644 index 00000000000..102d4c96b94 --- /dev/null +++ b/testlib/test/concurrent/SerialFunAndTupleTest.kt @@ -0,0 +1,32 @@ +package serial + +import java.io.ObjectOutputStream +import java.io.ByteArrayOutputStream +import java.io.ByteArrayInputStream +import java.io.ObjectInputStream +import java.io.Serializable +import java.util.HashMap +import junit.framework.TestCase +import junit.framework.Assert + +class Serial(val a : String) : java.lang.Object(), Serializable { + override fun toString() = a +} + +class SerialTest() : TestCase() { + fun testMe() { + val tuple = #("lala", "bbb", Serial("serial")) + val op = { -> tuple.toString() } + + val baos = ByteArrayOutputStream() + val oos = ObjectOutputStream(baos) + oos.writeObject(op) + oos.close() + + val bais = ByteArrayInputStream(baos.toByteArray()) + val ins = ObjectInputStream(bais) + val ops = ins.readObject() as (() -> String) + + Assert.assertEquals(op (), ops()) + } +}