2016-03-21 3 views
1

Не нашел ответ на эти темы: first, secondНе может найти ScalaSig для класса java.lang.Object

Есть следующую проблему. У меня есть класс с именем Foo случай:

case class Foo(a: Int, b: List[Int])

Когда мне нужно сделать AST этого класса я призываю Extraction.decompose(<instance of Foo>) и получить AST represenation экземпляра Foo.

Но если я поле b как частное

case class Foo(a: Int, private val b: List[Int])

Я получаю org.json4s.package$MappingException: Can't find ScalaSig for class java.lang.Object исключение.

Это относится только к частным полям, которые являются коллекциями.

Если частное поле является простым объектом, оно просто не появляется в AST. Почему это исключение происходит?

EDIT Возникает же исключение, если у меня есть класс, расширяющий случай некоторые черты с ПВС или ленивых VAL полей:

trait Bar { 
    val list: List[Int] = List(1,2,3) 
} 

case class Example(field: Double) extends Bar 
+0

Попробуйте использовать bigint вместо int. – Jet

+0

Я спросил не о том, как это исправить, я спросил, почему это происходит. Стоит упомянуть, что это работает со строкой – maks

ответ

2

Я думаю, что это похоже на вопрос, который я бегу в.

Во-первых, ScalaSigreader#42

if (current == null) 

должен быть

if (current == classOf[java.lang.Object]) 

Тогда вы получите сообщение об ошибке более полезным: "Не удается найти поле Ь от Foo". Но это само по себе не решает проблему.

Я не искал исправления для частного вопроса на поле. Однако у меня есть исправление проблемы с интерфейсом. Для этой проблемы необходимо изменить ScalaSigReader#45.

В настоящее время, если поле не найден, то суперкласс искали:

findField(findClass(current), name).getOrElse(read(current.getSuperclass)) 

интерфейсы должны быть найдены, а также:

findField(current, name) 
    .orElse(current.getInterfaces.flatMap(findField(_, name)).headOption) 
    .getOrElse(read(current.getSuperclass)) 

private def findField(clazz: Class[_], name: String): Option[MethodSymbol] = 
    findField(findClass(clazz), name) 

Смотрите также:

Issue #403

Pull #436

Смежные вопросы