summaryrefslogtreecommitdiff
path: root/test/files/run/t10075.scala
blob: e7564c5c8b65fff44976d1c759351766f6a0f71a (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
class NotSerializable

trait SerializableActually {
  @transient
  lazy val notSerializedTLV: NotSerializable = new NotSerializable

  @transient
  val notSerializedTL: NotSerializable = new NotSerializable

  @transient
  var notSerializedTR: NotSerializable = new NotSerializable
}

class SerializableBecauseTransient extends Serializable with SerializableActually {
  @transient
  lazy val notSerializedLV: NotSerializable = new NotSerializable

  @transient
  val notSerializedL: NotSerializable = new NotSerializable

  @transient
  var notSerializedR: NotSerializable = new NotSerializable
}

// Indirectly check that the @transient annotation on `notSerialized` made it to the underyling field in bytecode.
// If it doesn't, `writeObject` will fail to serialize the field `notSerialized`, because `NotSerializable` is not serializable
object Test {
  def main(args: Array[String]): Unit = {
    val obj = new SerializableBecauseTransient
    // must force, since `null` valued field is serialized regardless of its type
    val forceTLV = obj.notSerializedTLV
    val forceLV  = obj.notSerializedLV
    new java.io.ObjectOutputStream(new java.io.ByteArrayOutputStream) writeObject obj
  }
}