Поиск внутри scala 2.10 ASTs
Какой лучший способ рекурсивного поиска элемента в scala 2.10 AST?
Деревья могут быть результатом power.trees(code)
или же mirror.mkToolBox().parseExpr(code)
Редактировать В 2.10.0-RC1 parseExpr
был переименован в parse
,
Конкретный вариант использования, который у меня есть, заключается в извлечении кода метода из заданного кода класса / объекта по имени метода, но я предполагаю, что вопрос будет более актуальным для других, если сформулировать его более общим способом.
1 ответ
Возможно, вам стоит взглянуть на https://github.com/scala/scala/blob/2.10.x/src/reflect/scala/reflect/api/Trees.scala, особенно на классы Traverser, Transformer и методы замещения (Tree.substituteSymbols
, Tree.substituteTypes
или же Tree.substituteThis
). Если вы хотите извлечь метод из дерева, вы можете использовать Traverser
и переопределить traverse
метод. В методе обхода вы проверяете, соответствует ли узел нужному методу. Если это так, вы сделали. Если нет, звоните super.traverse
,