查找Scala中所有非合成方法/函数的类型签名

时间:2015-02-03 04:27:58

标签: scala scala-macros scalac scala-compiler scala-reflect

我试图找到一种方法来获取Scala编译器的符号表(?)并将所有类型信息转储到特定SBT项目中的方法/函数中。我前进的当前方向是一个编译器插件,在typer阶段后立即挂钩。

有点徘徊,我正在看根镜并检查它的info.decls字段,这有点像:

def newPhase(prev: Phase): Phase =
  new StdPhase(prev) {
    def apply(unit: CompilationUnit): Unit = {
      val decls = global.RootClass.info.decls
      val scalaz = decls.find(_.toString contains "scalaz")
      println(scalaz.get.info.decls.filter(x => !x.hasMeaninglessName))

它转储了很多东西,但是......我仍然得到了相当奇怪的输出,如class anonfun$reduceUnordered$1 extends ;

想知道我是否正朝着正确的方向前进,如果是的话,我应该更多地关注 获取项目中方法的类型签名?

1 个答案:

答案 0 :(得分:0)

你当然正朝着正确的方向前进。您可以在https://github.com/CANVE/extractor中看到完整的解决方案。正如您所示,某些符号是" synthetic",例如在源代码中使用匿名函数的情况。那么你可能想要从任何"数据转储中抽象掉那些符号"你拉出来的,取决于你想要完成的具体任务。