aboutsummaryrefslogtreecommitdiff
path: root/tests/run/t3038d.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/t3038d.scala')
-rw-r--r--tests/run/t3038d.scala58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/run/t3038d.scala b/tests/run/t3038d.scala
new file mode 100644
index 000000000..3dab07675
--- /dev/null
+++ b/tests/run/t3038d.scala
@@ -0,0 +1,58 @@
+trait Foo {
+ @transient protected var load = 1
+ @transient protected var a = 12
+
+ protected def init[B](in: java.io.ObjectInputStream): Unit = {
+ in.defaultReadObject
+ load = in.readInt
+ val sizea = in.readInt
+ a = 12
+ }
+
+ protected def serializeTo(out: java.io.ObjectOutputStream): Unit = {
+ out.defaultWriteObject
+ out.writeInt(load)
+ out.writeInt(a)
+ }
+}
+
+class Bar extends Foo with Serializable {
+ @transient protected var first: Any = null
+ def size = a
+ @transient var second: Any = null
+
+ def checkMember: Unit = { if (first == null) print("") }
+
+ private def writeObject(out: java.io.ObjectOutputStream): Unit = {
+ serializeTo(out)
+ }
+
+ private def readObject(in: java.io.ObjectInputStream): Unit = {
+ first = null
+ init(in)
+ }
+}
+
+object Test {
+ private def toObject[A](bytes: Array[Byte]): A = {
+ val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes))
+ in.readObject.asInstanceOf[A]
+ }
+
+ private def toBytes(o: AnyRef): Array[Byte] = {
+ val bos = new java.io.ByteArrayOutputStream
+ val out = new java.io.ObjectOutputStream(bos)
+ out.writeObject(o)
+ out.close
+ bos.toByteArray
+ }
+
+
+ def main(args: Array[String]): Unit = {
+ val a1 = new Bar()
+ val serialized:Array[Byte] = toBytes(a1)
+ val deserialized: Bar = toObject(serialized)
+ deserialized.size
+ deserialized.checkMember
+ }
+}