diff options
author | Philipp Haller <hallerp@gmail.com> | 2014-07-09 14:43:12 +0200 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2014-07-15 14:03:49 +0200 |
commit | 5762110d0dc2cb492e34d5595c473aa0f9ca786a (patch) | |
tree | 974c218830fcab44f386c11be28a82b0ec3acc71 /test/files/run/exprs_serialize.scala | |
parent | 87bba9418ca891c436f386207b3b9e70b4a64c71 (diff) | |
download | scala-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/exprs_serialize.scala')
-rw-r--r-- | test/files/run/exprs_serialize.scala | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/test/files/run/exprs_serialize.scala b/test/files/run/exprs_serialize.scala index c4310b0fe1..91027803b4 100644 --- a/test/files/run/exprs_serialize.scala +++ b/test/files/run/exprs_serialize.scala @@ -26,4 +26,14 @@ object Test extends App { test(reify(2)) test(reify{def foo = "hello"; foo + "world!"}) -}
\ No newline at end of file + test(reify { + def foo(x: Int) = { + class Local { + val f = 2 + } + val obj = new Local + x % obj.f == 0 + } + foo(5) + }) +} |