Did you also check the documentation? http://docs.groovy-lang.org/next/html/documentation/#_macros
On Sat, May 26, 2018 at 7:04 PM mg <mg...@arscreat.com> wrote: > Hi Cedric, > > thank you for replying. I did try having the @Macro annotated in a > (static) method in a seperate class first, then moved it closer to the > test. I posted that for brevity, and since I was banking on the author of > the feature to set me straight... > > The release notes (http://groovy-lang.org/releasenotes/groovy-2.5.html) > currently have the following to say on the topic: > Macro support > > With Groovy 2.5, you can write macros in Groovy! > Expressions and statements > > TBD > Macro classes > > TBD > AST matching > > TBD > > -------- Ursprüngliche Nachricht -------- > Von: Cédric Champeau <cedric.champ...@gmail.com> > Datum: 26.05.18 18:12 (GMT+01:00) > An: dev@groovy.apache.org > Betreff: Re: Groovy 2.5 @Macro ? > > I didn't check, but I _think_ you can't define a macro and use it in the > same file. > > Le sam. 26 mai 2018 à 17:15, MG <mg...@arscreat.com> a écrit : > >> I would have expected a quick "you can't use it like that / you just have >> to / here is some documentation" reply... >> Then let me rephrase my question: Why are these Groovy 2.5 tests green: >> >> https://github.com/apache/groovy/blob/GROOVY_2_5_X/subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTransformationTest.groovy >> ? >> Cheers, >> mg >> >> On 26.05.2018 00:00, MG wrote: >> >> Hi guys, >> >> giving the new Groovy 2.5 macro functionality a spin, and would have >> expected the code below to replace the "call" to nv(x) with the AST >> expression created in the method, i.e. returning the name of the "passed" >> variable. Instead no macro magic happens, and the compilation accordingly >> fails with "groovy.lang.MissingMethodException: No signature of method: >> groovy.GroovyMacroSpike.nv() is applicable for argument types: (Integer) >> values: [123]": >> >> import org.codehaus.groovy.ast.expr.Expressionimport >> org.codehaus.groovy.ast.expr.VariableExpressionimport >> org.codehaus.groovy.macro.runtime.Macroimport >> org.codehaus.groovy.macro.runtime.MacroContextimport org.junit.Ignoreimport >> org.junit.Testimport static org.codehaus.groovy.ast.tools.GeneralUtils.constX >> class GroovyMacroSpike { >> @Test @Ignore void nvTest() { >> final x = 123 assert x == 123 assert nv(x) == "x" } >> >> @Macro Expression nv(MacroContext ctx, VariableExpression variable) { >> return constX(variable.getName()); >> } >> } >> >> What is missing to make this work ? >> mg >> >> >> >> -- Guillaume Laforge Apache Groovy committer & PMC Vice-President Developer Advocate @ Google Cloud Platform Blog: http://glaforge.appspot.com/ Twitter: @glaforge <http://twitter.com/glaforge>