aboutsummaryrefslogtreecommitdiff
path: root/tests/run/t3038d.scala
blob: 3dab076759cc8af13d24be861b769d9c59799ae6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
  }
}