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Читать дальше →