Я пишу парсер в чистом виде Scala с IntelliJ Idea CE (версия 2019.3.4) на macOS (версия 10.15.4 на момент публикации). Проект настроен как проект sbt.
Когда я компилирую и тестирую проект через командную строку, запустив sbt
, затем compile
, затем test
(или просто sbt
, затем test
), все отлично работает. Код компилируется должным образом, и все тесты проходят.
Однако, когда я пытаюсь скомпилировать код через IntelliJ GUI, я получаю следующее сообщение об ошибке:
Error:scala: Error while emitting Protobuf3Parser.scala
assertion failed: Invalid interfaces in LPredefinedType;: List(LFieldType;, Lscala/Product;)
проблемный фрагмент кода выглядит как
sealed trait FieldType
case class PredefinedType(t: DataType) extends FieldType
case class UserDefinedType(t: FullIdent) extends FieldType
, где DataType
- это sealed trait
, а FullIdent
- это case class
.
Вывод этой ошибки выглядит аналогично выводу этой ошибки из официального языкового репозитория Scala: https://github.com/scala/bug/issues/10107. Хотя я не эксперт по внутренним элементам Scala, полученная мною ошибка, похоже, связана с тем, что Scala представляет систему типов в JVM.
По словам коллеги, более знакомого с Scala чем я, у JetBrains есть собственная реализация компиляторов, которые они используют внутри самого IntelliJ, и иногда его поведение отличается от официальной Scala реализации - что объясняет, что здесь происходит.
Есть ли способ настроить IntelliJ использовать внешнюю версию sbt и scalac?
Или эта ошибка возникла откуда-то еще?
Я пробовал довольно много поисков в Google и просмотрел и экспериментировал с разными настройками IntelliJ, но безрезультатно.