heathermiller / scala-pickling

Fast, customizable, boilerplate-free pickling support for Scala. MOVED TO http://github.com/scala/pickling
18 stars 1 forks source link

crash in console #10

Closed xeno-by closed 11 years ago

xeno-by commented 11 years ago
scala> import scala.pickling._; import json._
import scala.pickling._
import json._

scala> case class C1(x: Array[Int])
defined class C1

scala> C(Array(1)).pickle
<console>:14: error: not found: value C
              C(Array(1)).pickle
              ^

scala> C1(Array(1)).pickle
res1: scala.pickling.json.JSONPickle =
JSONPickle({
  "tpe": "C1",
  "x": [
    1
  ]
})

scala> res1.unpickle[C1]
scala.reflect.internal.MissingRequirementError: class C1 in JavaMirror with sbt.classpath.ClasspathUtilities$$anon$1@3c9f6e5a of type class sbt.classpath.ClasspathUtilities$$anon$1 with classpath [file:/Users/xeno_by/Projects/scala-pickling-211/core/target/scala-2.11/classes/,file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/scala-library.jar,file:/Users/xeno_by/.ivy2/cache/org.scala-lang.macro-paradise/scala-reflect/jars/scala-reflect-2.11.0-SNAPSHOT.jar,file:/Users/xeno_by/.ivy2/cache/org.scala-lang.macro-paradise/scala-library/jars/scala-library-2.11.0-SNAPSHOT.jar,file:/Users/xeno_by/.ivy2/cache/org.scala-lang.macro-paradise/scala-compiler/jars/scala-compiler-2.11.0-SNAPSHOT.jar] and parent being java.net.URLClassLoader@7e5284e9 of type class java.net.URLClassLoader with classpath [file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/jansi.jar,file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/jline.jar,file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/scala-compiler.jar,file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/scala-library.jar,file:/Users/xeno_by/.sbt/0.12.2/boot/org.scala-lang.macro-paradise.scala-2.11.0-SNAPSHOT/lib/scala-reflect.jar] and parent being java.net.URLClassLoader@10382a9 of type class java.net.URLClassLoader with classpath [file:/Users/xeno_by/.sbt/0.12.2/boot/other/net.java.dev.jna/jna/3.2.3/jna-3.2.3.jar] and parent being xsbt.boot.BootFilteredLoader@d7725c4 of type class xsbt.boot.BootFilteredLoader with classpath [<unknown>] and parent being sun.misc.Launcher$AppClassLoader@69cd2e5f of type class sun.misc.Launcher$AppClassLoader with classpath [file:/usr/local/sbt/lib/sbt-launch.jar] and parent being sun.misc.Launcher$ExtClassLoader@1d9f953d of type class sun.misc.Launcher$ExtClassLoader with classpath [file:/System/Library/Java/Extensions/AppleScriptEngine.jar,file:/System/Library/Java/Extensions/dns_sd.jar,file:/System/Library/Java/Extensions/j3daudio.jar,file:/System/Library/Java/Extensions/j3dcore.jar,file:/System/Library/Java/Extensions/j3dutils.jar,file:/System/Library/Java/Extensions/jai_codec.jar,file:/System/Library/Java/Extensions/jai_core.jar,file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib,file:/System/Library/Java/Extensions/libJ3D.jnilib,file:/System/Library/Java/Extensions/libJ3DAudio.jnilib,file:/System/Library/Java/Extensions/libJ3DUtils.jnilib,file:/System/Library/Java/Extensions/libmlib_jai.jnilib,file:/System/Library/Java/Extensions/libQTJNative.jnilib,file:/System/Library/Java/Extensions/mlibwrapper_jai.jar,file:/System/Library/Java/Extensions/MRJToolkit.jar,file:/System/Library/Java/Extensions/QTJava.zip,file:/System/Library/Java/Extensions/vecmath.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar] and parent being primordial classloader with boot classpath [/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar] not found.
    at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)
    at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18)
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:51)
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:64)
    at scala.reflect.internal.Mirrors$RootsBase.staticModuleOrClass(Mirrors.scala:75)
    at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:124)
    at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:22)
    at scala.pickling.package$.typeFromString(package.scala:51)
    at scala.pickling.json.JSONPickleReader$$anonfun$beginEntry$2.apply(JSONPickleFormat.scala:160)
    at scala.pickling.json.JSONPickleReader$$anonfun$beginEntry$2.apply(JSONPickleFormat.scala:154)
    at scala.pickling.PickleTools$class.withHints(Tools.scala:327)
    at scala.pickling.json.JSONPickleReader.withHints(JSONPickleFormat.scala:131)
    at scala.pickling.json.JSONPickleReader.beginEntry(JSONPickleFormat.scala:154)
    at scala.pickling.json.JSONPickleReader.beginEntryNoTag(JSONPickleFormat.scala:153)
xeno-by commented 11 years ago

!!! That's an unfortunate consequence of https://github.com/heathermiller/scala-pickling/blob/5add32c76cc0ddb25f39745fd2e9deac2f821d0f/core/src/main/scala/pickling/package.scala#L31

phaller commented 11 years ago

Hmm, what could we do about that?

xeno-by commented 11 years ago

Either allow reassignment of scala.pickling.package.mirror or prohibit sbt :)

phaller commented 11 years ago

How does reassignment help?

xeno-by commented 11 years ago

I mean as workarounds. Principled solution would be to introduce an implicit of type Mirror at the top of the generated code block and then replace references to scala.pickling.mirror to `implicitly[Mirror], but we would have to measure the performance of that, which is outside of our timeframe for the demo.

xeno-by commented 11 years ago

By reassigning we would be able to set the correct mirror from the callsite.

phaller commented 11 years ago

I see. I guess re-assignment at the callsite is OK for the demo.

xeno-by commented 11 years ago

b8a9b157ea6b095d829c23946d7940b607b8d47f