Я понимаю, что можно получить Дерево, соответствующее выражению Scala, а также пройтись по полученному дереву. Предположим, что данный узел дерева соответствует некоторому критерию, какие вызовы методов мне нужны, чтобы иметь возможность модифицировать его на месте?, то есть заменить его каким-то другим деревом?
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)
}
}