Scala: ошибка компиляции из-за огромного количества методов в цепочке - PullRequest
1 голос
/ 08 мая 2020

Есть объект (java объект, созданный из схемы avro) с построителем. Объект имеет плоскую структуру и содержит около 200 полей.

Код выглядит так:

Object.newBuilder()
  .setField1()
  .setField2()
  ...
  .setField200()

Компилятор scala в Idea компилирует это без каких-либо проблем. Когда я попытался запустить сборку maven - возникла проблема с компиляцией: StackOverflow

 [ERROR] error: java.lang.StackOverflowError
 [INFO]     at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:666)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5303)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5330)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5277)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5281)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5379)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5387)
 [INFO]     at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:612)
 [INFO]     at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:666)
 [INFO]     at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5303)

Scala версия: 2.11 Scala плагин maven: 3.3.1

В качестве обходного пути я разделить методы набора на группы (по 100 сеттеров в каждой цепочке)

val builder = Object.newBuilder()
builder.setField1()
  .setField2()
  ...
  .setField100()
builder.setField101()  
  ...
  .setField200()

Это удалось скомпилировать на моей локальной машине, но не удалось скомпилировать на сервере Jenkins. После того, как я разделил сеттеры на более мелкие группы (по 30 сеттеров в каждой группе), код также скомпилирован на сервере Jenkins.

Есть ли какой-либо параметр, который настраивает такое поведение в компиляторе scala?

1 Ответ

0 голосов
/ 08 мая 2020

Раньше у меня была такая же проблема, и я решил ее, увеличив размер стека по умолчанию с 1 МБ до 10 МБ. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...