diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2010-11-30 15:38:56 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2010-11-30 15:38:56 +0000 |
commit | 4be5e11cccace4974ed9a449052455392570139f (patch) | |
tree | 88c86bc65b88df08b48584ed791acd1619983c0c /test/files | |
parent | 402d96dd3fab6ae677966a9a258c00b3f34a37ed (diff) | |
download | scala-4be5e11cccace4974ed9a449052455392570139f.tar.gz scala-4be5e11cccace4974ed9a449052455392570139f.tar.bz2 scala-4be5e11cccace4974ed9a449052455392570139f.zip |
Deprecated the @serializable annotation, introd...
Deprecated the @serializable annotation, introduce a new trait
"scala.Serializable" which has to be extended instead (cross-platform).
Known issues:
- Companion objects of serializable classes (including case classes) are automatically made serializable. However, they don't extend "Serializable" statically because of the known difficulty (should be done before typing, but hard).
- Writing "case class C() extends Serializable" gives "error: trait Serializable is inherited twice"
- Functions are serializable, but don't extend Serializable dynamically (could be fixed by making FunctionN Serializable - shouldn't we?)
Note that @SerialVersionUID continues to be an annotation; it generates
a static field, which is not possible otherwise in scala.
Review by dragos, extempore.
Question to dragos: in JavaPlatform.isMaybeBoxed, why is there a test
for "JavaSerializableClass"? Is that correct?
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/jvm/serialization.scala | 31 | ||||
-rw-r--r-- | test/files/pos/t3924.scala | 6 | ||||
-rw-r--r-- | test/files/run/t3667.check | 3 | ||||
-rw-r--r-- | test/files/run/t3667.scala | 31 | ||||
-rw-r--r-- | test/files/scalap/caseClass/result.test | 5 | ||||
-rw-r--r-- | test/files/scalap/caseObject/result.test | 2 |
6 files changed, 50 insertions, 28 deletions
diff --git a/test/files/jvm/serialization.scala b/test/files/jvm/serialization.scala index b16d46adad..2e34079505 100644 --- a/test/files/jvm/serialization.scala +++ b/test/files/jvm/serialization.scala @@ -40,7 +40,6 @@ object Test1_scala { (a1.length == a2.length) && (Iterator.range(0, a1.length) forall { i => a1(i) == a2(i) }) - @serializable object WeekDay extends Enumeration { type WeekDay = Value val Monday, Tuesday, Wednesday, Thusday, Friday, Saturday, Sunday = Value @@ -187,7 +186,6 @@ object Test1_scala { //############################################################################ // Test classes in package "scala.collection.immutable" -@serializable object Test2_immutable { import scala.collection.immutable.{ BitSet, HashMap, HashSet, ListMap, ListSet, Queue, Range, SortedMap, @@ -353,10 +351,6 @@ object Test3_mutable { val _hs1: HashSet[String] = read(write(hs1)) check(hs1, _hs1) - // History - @serializable - class Feed extends Publisher[String] - val h1 = new History[String, Int] val _h1: History[String, Int] = read(write(h1)) check(h1, _h1) @@ -373,8 +367,6 @@ object Test3_mutable { val _lb1: ListBuffer[String] = read(write(lb1)) check(lb1, _lb1) - // Publisher - // Queue val q1 = new Queue[Int] q1 ++= List(20, 2, 3).iterator @@ -471,8 +463,7 @@ object Test4_xml { //############################################################################ // Test user-defined classes WITHOUT nesting -@serializable -class Person(_name: String) { +class Person(_name: String) extends Serializable { private var name = _name override def toString() = name override def equals(that: Any): Boolean = @@ -480,12 +471,11 @@ class Person(_name: String) { (name == that.asInstanceOf[Person].name) } -@serializable -class Employee(_name: String) { +class Employee(_name: String) extends Serializable { private var name = _name override def toString() = name } -@serializable + object bob extends Employee("Bob") object Test5 { @@ -508,13 +498,10 @@ object Test5 { //############################################################################ // Test user-defined classes WITH nesting -@serializable object Test6 { - @serializable object bill extends Employee("Bill") { val x = paul } - @serializable object paul extends Person("Paul") { val x = 4 // bill; => StackOverflowException !!! } @@ -540,11 +527,8 @@ object Test6 { //############################################################################ // Nested objects cannot get readresolve automatically because after deserialization // they would be null (they are treated as lazy vals) -@serializable -class Outer { - - @serializable - object Inner +class Outer extends Serializable { + object Inner extends Serializable } object Test7 { @@ -564,11 +548,10 @@ object Test7 { // Verify that transient lazy vals don't get serialized -@serializable -class WithTransient { +class WithTransient extends Serializable { @transient lazy val a1 = 1 @transient private lazy val a2 = 2 - @transient @serializable object B + @transient object B extends Serializable def test = { println(a1) diff --git a/test/files/pos/t3924.scala b/test/files/pos/t3924.scala new file mode 100644 index 0000000000..35165baaf0 --- /dev/null +++ b/test/files/pos/t3924.scala @@ -0,0 +1,6 @@ +object Test { + class Hoe extends Serializable { + def add(a: java.io.Serializable): Unit = println(a) + def someMethod() { add(this) } + } +} diff --git a/test/files/run/t3667.check b/test/files/run/t3667.check index 01e79c32a8..bbe5d1bc48 100644 --- a/test/files/run/t3667.check +++ b/test/files/run/t3667.check @@ -1,3 +1,6 @@ 1 2 3 +4 +2 +3 diff --git a/test/files/run/t3667.scala b/test/files/run/t3667.scala index 7bd0b4ec5e..f30d57ce3a 100644 --- a/test/files/run/t3667.scala +++ b/test/files/run/t3667.scala @@ -3,6 +3,9 @@ object Test { val o1 = new Outer1 val o2 = new Outer2 val o3 = new Outer3 + val o4 = new Outer4 + val o5 = new Outer5 + val o6 = new Outer6 println(1) ser(new o1.Inner(1)) @@ -19,6 +22,21 @@ object Test { o3.Inner ser(new o3.Inner(1)) + println(4) + ser(new o4.Inner(1)) + o4.Inner + ser(new o4.Inner(1)) + + println(2) + ser(new o5.Inner(1)) + o5.Inner + ser(new o5.Inner(1)) + + println(3) + ser(new o6.Inner(1)) + o6.Inner + ser(new o6.Inner(1)) + foo } @@ -51,3 +69,16 @@ class Outer2 { class Outer3 { case class Inner(x: Int) } + + +class Outer4 extends Serializable { + class Inner(x: Int = 1) extends Serializable +} + +class Outer5 extends Serializable { + case class Inner(x: Int = 1) +} + +class Outer6 extends Serializable { + case class Inner(x: Int) +} diff --git a/test/files/scalap/caseClass/result.test b/test/files/scalap/caseClass/result.test index eb1ad74295..9b65be4b48 100644 --- a/test/files/scalap/caseClass/result.test +++ b/test/files/scalap/caseClass/result.test @@ -1,5 +1,4 @@ -@scala.serializable -case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product { +case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable { val i : A = { /* compiled code */ } val s : scala.Predef.String = { /* compiled code */ } def foo : scala.Int = { /* compiled code */ } @@ -11,4 +10,4 @@ case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) override def productArity : scala.Int = { /* compiled code */ } override def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ } override def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ } -}
\ No newline at end of file +} diff --git a/test/files/scalap/caseObject/result.test b/test/files/scalap/caseObject/result.test index d888191919..d4e90a0375 100644 --- a/test/files/scalap/caseObject/result.test +++ b/test/files/scalap/caseObject/result.test @@ -1,4 +1,4 @@ -case object CaseObject extends java.lang.Object with scala.ScalaObject with scala.Product { +case object CaseObject extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable { def bar : scala.Int = { /* compiled code */ } final override def toString() : java.lang.String = { /* compiled code */ } override def productPrefix : java.lang.String = { /* compiled code */ } |