Example fails to run #387
Description
I can't get the example code to work (copied directly from https://github.com/scala/pickling/wiki/Writing-custom-Picklers-Unpicklers):
//-----------------------------------------------------------
class Foo(val x: String)
object Foo {
implicit object pickler extends AbstractPicklerUnpickler[Foo] {
private val stringPickler = implicitly[Pickler[String]]
private val stringUnpickler = implicitly[Unpickler[String]]
override val tag = FastTypeTag[Foo]
override def pickle(picklee: Foo, builder: PBuilder): Unit = {
builder.hintTag(tag) // This is always required
builder.beginEntry(picklee)
builder.putField("x", { fieldBuilder =>
stringPickler.pickle(picklee.x, fieldBuilder)
})
builder.endEntry()
}
override def unpickle(tag: String, reader: PReader): Any = {
val x = stringUnpickler.unpickleEntry(reader.readField("x"))
new Foo(x.asInstanceOf[String])
}
}
}
val fo = new Foo("Hi")
println("Foo:")
println(fo.x)
println("pickled Foo:")
println( fo.pickle)
//----------------------------------
In my build.sbt file, I have this version info:
libraryDependencies += "org.scala-lang.modules" %% "scala-pickling" % "0.10.2-SNAPSHOT"
resolvers += Resolver.sonatypeRepo("snapshots")
-- The code compiles but fails to run, with the following messages:
Exception in thread "main" java.lang.NullPointerException
at scala.pickling.json.JSONPickleBuilder$$anonfun$beginEntry$1.apply(JSONPickleFormat.scala:109)
at scala.pickling.json.JSONPickleBuilder$$anonfun$beginEntry$1.apply(JSONPickleFormat.scala:102)
at scala.pickling.PickleTools$class.withHints(Tools.scala:521)
at scala.pickling.json.JSONPickleBuilder.withHints(JSONPickleFormat.scala:39)
at scala.pickling.json.JSONPickleBuilder.beginEntry(JSONPickleFormat.scala:102)
at PicklingTest$Foo$pickler$JavaLangStringPickler$macro$144$2$.pickle(PicklingTest.scala:184)
at PicklingTest$Foo$pickler$JavaLangStringPickler$macro$144$2$.pickle(PicklingTest.scala:184)
at PicklingTest$Foo$pickler$$anonfun$pickle$26.apply(PicklingTest.scala:193)
at PicklingTest$Foo$pickler$$anonfun$pickle$26.apply(PicklingTest.scala:192)
at scala.pickling.json.JSONPickleBuilder.putField(JSONPickleFormat.scala:140)
at PicklingTest$Foo$pickler$.pickle(PicklingTest.scala:192)
at PicklingTest$Foo$pickler$.pickle(PicklingTest.scala:183)
at scala.pickling.functions$.pickleInto(functions.scala:29)
at scala.pickling.functions$.pickle(functions.scala:14)
at scala.pickling.PickleOps.pickle(Ops.scala:9)
at PicklingTest$.delayedEndpoint$PicklingTest$1(PicklingTest.scala:208)
at PicklingTest$delayedInit$body.apply(PicklingTest.scala:22)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at PicklingTest$.main(PicklingTest.scala:22)
at PicklingTest.main(PicklingTest.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
It is failing when it goes into putField: the stringPickler seems to be involved - is it getting passed the wrong thing?
Thank you.