【发布时间】:2020-07-16 06:37:07
【问题描述】:
我正在使用 macOS(发布时版本 10.15.4)上的 IntelliJ Idea CE(版本 2019.3.4)在纯 Scala 中编写解析器。该项目设置为 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 设置,但无济于事。
【问题讨论】:
-
尝试启用use sbt shell
-
不幸的是,按照这些说明操作似乎不起作用。将 IDE 配置为使用“sbt”作为外部工具似乎确实有效,但不幸的是,这与使用命令行一样方便。
标签: scala intellij-idea sbt