修改Scala AST中的节点

时间:2013-02-05 21:38:16

标签: scala reflection scala-2.10

我知道可以获得与Scala表达式相对应的Tree,也可以遍历生成的树。假设一个给定的树节点与某个标准匹配,我需要在哪个方法调用它来修改它?,即用其他树替换它?

object traverser extends Traverser {
    var applies = List[Apply]()

    override def traverse(tree: Tree): Unit = tree match {
        case someCriterion => modifyNodeSomehow // How to do this?
        // Otherwise...
        case app @ Apply(fun, args) =>
            applies = app :: applies
            super.traverse(fun)
            super.traverseTrees(args)
        case _ => super.traverse(tree)
    }
}

1 个答案:

答案 0 :(得分:1)

another question我被建议使用Transformer做类似的事情。但是,AFAIK无法修改树。