summaryrefslogtreecommitdiff
path: root/test/files/run/typetags_serialize.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2014-07-09 14:43:12 +0200
committerPhilipp Haller <hallerp@gmail.com>2014-07-15 14:03:49 +0200
commit5762110d0dc2cb492e34d5595c473aa0f9ca786a (patch)
tree974c218830fcab44f386c11be28a82b0ec3acc71 /test/files/run/typetags_serialize.scala
parent87bba9418ca891c436f386207b3b9e70b4a64c71 (diff)
downloadscala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.tar.gz
scala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.tar.bz2
scala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.zip
SI-5919 TypeTags and Exprs should be serializable
- Make TypeCreator and TreeCreator extend Serializable. - When replacing a SerializedTypeTag with a TypeTag or WeakTypeTag, do not use scala.reflect.runtime.universe.rootMirror, since it is unlikely to find user classes; instead, create a runtime mirror using the context ClassLoader of the current thread. Use the same logic for SerializedExpr. - Remove writeObject/readObject methods from SerializedTypeTag and SerializedExpr since they are unused. - Add @throws annotation on writeReplace and readResolve methods. - Handle SecurityException if the current thread cannot access the context ClassLoader. - To make type tags of primitive value classes serializable, make PredefTypeCreator a top-level class. Otherwise, it would retain a reference to the enclosing Universe, rendering the TypeCreator non-serializable. Binary compatibility: - Keep nested PredefTypeCreator class to avoid backward binary incompatible change. - Keep `var` modifiers on the class parameters of SerializedTypeTag for backward binary compatibility. - Adds filter rules to forward binary compatibility whitelist: - `TypeCreator`, `PredefTypeCreator`, and `TreeCreator` must now extend from `Serializable`. - Must have new class `scala.reflect.api.PredefTypeCreator` to avoid problematic outer reference.
Diffstat (limited to 'test/files/run/typetags_serialize.scala')
-rw-r--r--test/files/run/typetags_serialize.scala5
1 files changed, 5 insertions, 0 deletions
diff --git a/test/files/run/typetags_serialize.scala b/test/files/run/typetags_serialize.scala
index 3c842e6cc9..a7a7845232 100644
--- a/test/files/run/typetags_serialize.scala
+++ b/test/files/run/typetags_serialize.scala
@@ -4,6 +4,10 @@ import scala.reflect.runtime.{universe => ru}
import scala.reflect.runtime.{currentMirror => cm}
object Test extends App {
+ class C[A] {
+ def m(a: A): Int = 5
+ }
+
def test(tag: TypeTag[_]) =
try {
val fout = new ByteArrayOutputStream()
@@ -26,4 +30,5 @@ object Test extends App {
test(implicitly[TypeTag[Int]])
test(implicitly[TypeTag[String]])
+ test(implicitly[TypeTag[C[Double]]])
} \ No newline at end of file