Skip to content
This repository was archived by the owner on Feb 20, 2019. It is now read-only.
This repository was archived by the owner on Feb 20, 2019. It is now read-only.

Example fails to run #387

Open
Open
@LottiePrice

Description

@LottiePrice

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions