Невозможно сгенерировать unpickler в иерархии классов при передаче параметров объекта родителю

Приведенный ниже пример отлично работает, но я получаю ошибку компиляции, утверждающую, что не может быть сгенерирован unpickler. Вот простой тестовый пример, чтобы воспроизвести это:

import scala.pickling._
import json._
object JsonTest extends App {
  val simplePickle = new Simple(new SimpleProp("TestProp")).pickle
  val simpleUnpickle = simplePickle.unpickle[Simple]
}
abstract class SimpleAbstract(val stringWrapper: SimpleProp) {}
class Simple(stringWrapper: SimpleProp) extends SimpleAbstract(stringWrapper) {}
case class SimpleProp(prop: String) {}

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация по этому вопросу.

Вот трассировка стека, которую я получаю с флагом -Xlog-implicits:

    pickling.this.Unpickler.genUnpickler is not a valid implicit value for scala.pickling.Unpickler[com.ft.flexui.modules.pm.Simple] because:
exception during macro expansion: 
java.util.NoSuchElementException: None.get
    at scala.None$.get(Option.scala:313)
    at scala.None$.get(Option.scala:311)
    at scala.pickling.Macro.reflectively(Tools.scala:380)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2$$anonfun$16.apply(Macros.scala:248)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2$$anonfun$16.apply(Macros.scala:245)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2.unpickleObject$1(Macros.scala:245)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2.unpickleLogic$1(Macros.scala:273)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2.apply(Macros.scala:291)
    at scala.pickling.UnpicklerMacros$$anonfun$impl$2.apply(Macros.scala:184)
    at scala.pickling.Macro.preferringAlternativeImplicits(Tools.scala:357)
    at scala.pickling.UnpicklerMacros$class.impl(Macros.scala:184)
    at scala.pickling.Compat$$anon$3.impl(Compat.scala:24)
    at scala.pickling.Compat$.UnpicklerMacros_impl(Compat.scala:25)
    at sun.reflect.GeneratedMethodAccessor270.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at scala.tools.nsc.typechecker.Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$macroRuntime$3$$anonfun$apply$8.apply(Macros.scala:544)
    at scala.tools.nsc.typechecker.Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$macroRuntime$3$$anonfun$apply$8.apply(Macros.scala:544)
    at scala.tools.nsc.typechecker.Macros$class.scala$tools$nsc$typechecker$Macros$$macroExpandWithRuntime(Macros.scala:830)
    at scala.tools.nsc.typechecker.Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$macroExpand1$1.apply(Macros.scala:796)
    at scala.tools.nsc.typechecker.Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$macroExpand1$1.apply(Macros.scala:787)
    at scala.tools.nsc.Global.withInfoLevel(Global.scala:190)
    at scala.tools.nsc.typechecker.Macros$class.scala$tools$nsc$typechecker$Macros$$macroExpand1(Macros.scala:787)
  val simpleUnpickle = simplePickle.unpickle[Simple]
                                            ^

1 ответ

Решение

Это ошибка точно.

Мы подали билет и исправили его. Обновленная банка должна появиться на Sonatype в течение часа.

Протестировав его с новой флягой в REPL, теперь все хорошо:

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.pickling._
import json._
object JsonTest extends App {
  val simplePickle = new Simple(new SimpleProp("TestProp")).pickle
  val simpleUnpickle = simplePickle.unpickle[Simple]
}
abstract class SimpleAbstract(val stringWrapper: SimpleProp) {}
class Simple(stringWrapper: SimpleProp) extends SimpleAbstract(stringWrapper) {}
case class SimpleProp(prop: String) {}


// Exiting paste mode, now interpreting.

import scala.pickling._
import json._
defined module JsonTest
defined class SimpleAbstract
defined class Simple
defined class SimpleProp
Другие вопросы по тегам