MacroGroovy — работа с AST на Groovy ещё никогда не была такой простой
Последнее время часто приходится работать с такой мощной возможностью Groovy как Compile-time AST Transformations.
Так как я не люблю излишнюю динамику, то бОльшая часть проверок DSL на валидность у нас происходит на этапе компиляции, а так же мы используем очень много генерации кода. Поэтому каждый день приходится сталкиваться с составлением ASTNode-ов вручную. def someVariable = new ConstantExpression («someValue»);
def returnStatement = new ReturnStatement (
new ConstructorCallExpression (
ClassHelper.make (SomeCoolClass),
new ArgumentListExpression (someVariable)
)
);
До боли знакомые конструкции, не правда ли? Хотите, чтобы было вот так? def someVariable = macro { «someValue» }
def returnStatement = macro { return new SomeCoolClass ($v{ someVariable }) }
Или даже так? def constructorCall = macro { new SomeCoolClass ($v{ macro { «someValue» } }) }
В данной статье речь пойдёт о моём решении этой проблемы, максимально близком к родному решению Groovy — github.com/bsideup/MacroGroovyЧитать дальше →