Поиск в scala 2.10 AST

Какой лучший способ рекурсивно искать элемент в scala 2.10 ASTs?

Деревья могут быть результатом power.trees(code) или mirror.mkToolBox().parseExpr(code) Edit. В 2.10.0-RC1 parseExpr было переименовано в parse.

Конкретный прецедент, который у меня есть, - это извлечение кода метода из данного класса/объектного кода по имени метода, но я предполагаю, что вопрос будет более уместным для других, если сформулировать его более общим образом.

Ответ 1

Возможно, вам стоит взглянуть на https://github.com/scala/scala/blob/2.10.x/src/reflect/scala/reflect/api/Trees.scala#L606, особенно на классы Traverser, Transformer и методы подстановки (Tree.substituteSymbols, Tree.substituteTypes или Tree.substituteThis). Если вы хотите извлечь метод из дерева, вы можете использовать Traverser и переопределить метод traverse. В методе прохождения проверьте, соответствует ли node методу, который вы хотите. Если да, то все готово. Если нет, вы вызываете super.traverse.