groovy-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul King <pa...@asert.com.au>
Subject Re: Groovy 2.5 @Macro ?
Date Sat, 26 May 2018 23:50:15 GMT
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 <mgbiz@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
>
>
>
>

Mime
View raw message