如何解码Scala编译器生成的名称

如何解码Scala编译器生成的名称,scala,name-mangling,scalac,Scala,Name Mangling,Scalac,我们的代码将通过以下消息终止Scala编译器: [error] how can getCommonSuperclass() do its job if different class symbols get the same bytecode-level internal name: scala/Tuple2$mcJD$sp 为了弄清楚这一点,我试图理解Tuple2$mcJD$sp应该是什么。它是为(Long,Double)生成的类吗?这有文件记录吗?谢谢 到目前为止,我发现

我们的代码将通过以下消息终止Scala编译器:

[error] how can getCommonSuperclass() do its job if different class symbols
        get the same bytecode-level internal name: scala/Tuple2$mcJD$sp
为了弄清楚这一点,我试图理解Tuple2$mcJD$sp应该是什么。它是为
(Long,Double)
生成的类吗?这有文件记录吗?谢谢


到目前为止,我发现了一些线索:

  • 我认为类型缩略语与中记录的缩略语相匹配
  • 该名称是在中生成的。根据代码,格式为
    mc$sp

可能它被认为是编译器内部的东西,没有在任何地方记录。

这是来自
scalac
的实际错误吗?正确的说法是,这是一个实际错误。编译器死机时出现了
AssertionError
,问题似乎是Kryo让我注册
Tuple2$mcJD$sp
,我注册了。我现在改为注册
(Long,Double)
,它似乎避免了崩溃
scalac
。如果我能创建一个最小的测试用例,我将提交一个bug。