我试图找到一种方法来获取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 ;
想知道我是否正朝着正确的方向前进,如果是的话,我应该更多地关注 获取项目中方法的类型签名?
答案 0 :(得分:0)
你当然正朝着正确的方向前进。您可以在https://github.com/CANVE/extractor中看到完整的解决方案。正如您所示,某些符号是" synthetic",例如在源代码中使用匿名函数的情况。那么你可能想要从任何"数据转储中抽象掉那些符号"你拉出来的,取决于你想要完成的具体任务。