获取案例类的自动生成方法的来源

时间:2015-04-24 23:42:19

标签: scala scalac scala-compiler

如何获取案例类的所有自动生成的方法的代码,以便在重构为常规(非案例)类时干净地保留它们中的任何一个?是否有一些编译标志,揭示案例类的自动生成方法,或其他一些方式,最终将此减少到一个削减&粘贴?

我的印象是有编译标志可以自动显示扩展的定义......

2 个答案:

答案 0 :(得分:1)

你可以看到编译器使用-Xprint:<phase>标志去掉了源代码。对于您的示例(查看为案例类生成的代码),请运行:

scalac -Xprint:typer YourScala.sca

使用-Xshow-phases标记,您将看到所有可用的阶段。

但是你看到的输出不是可编译的scala源代码,而是一些中间表示。

答案 1 :(得分:0)

这可能不那么容易。

编译器生成字节代码,因此无法复制编译器输出并粘贴到源代码中。

您可以通读生成的字节代码并手动为类似方法重新创建Scala代码。这将是一个有点费力,但方法相对简单,理解字节代码是一件好事。

如果某处有可用的Scala反编译器,那么反编译已编译的案例类将显示您想要的代码。

鉴于这些方法依赖于case类的字段,它们不太可能在编译器实现中作为可以复制和粘贴的任何东西使用。

也许最好的办法是查看语言规范并实现案例类所描述的方法。