Your best bet is to have the macro class and META-INF/services file under src/main and your usage under src/test. If you want to do it all in one file, you can create a temp directory, stuff the META-INF/services file in it, add that directory to the classpath dynamically and then run your code using the macro with a new GroovyShell().
On Sun, May 27, 2018 at 1:15 AM, MG <mg...@arscreat.com> wrote: > 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 > > > >