summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2010-11-30 15:38:56 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2010-11-30 15:38:56 +0000
commit4be5e11cccace4974ed9a449052455392570139f (patch)
tree88c86bc65b88df08b48584ed791acd1619983c0c /test/files
parent402d96dd3fab6ae677966a9a258c00b3f34a37ed (diff)
downloadscala-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.scala31
-rw-r--r--test/files/pos/t3924.scala6
-rw-r--r--test/files/run/t3667.check3
-rw-r--r--test/files/run/t3667.scala31
-rw-r--r--test/files/scalap/caseClass/result.test5
-rw-r--r--test/files/scalap/caseObject/result.test2
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 */ }