git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Groovy 2.5 @Macro ?


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@xxxxxxxxxxxx> 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._expression_
import org.codehaus.groovy.ast.expr.VariableExpression
import org.codehaus.groovy.macro.runtime.Macro
import org.codehaus.groovy.macro.runtime.MacroContext
import org.junit.Ignore
import org.junit.Test

import 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