I've done some very minimal doco already but have more to do. On Sun., 27 May 2018, 8:47 pm mg, <mg...@arscreat.com> wrote:
> I saw that, but assertScript is used for many tests, outside of the > special requirements of @Macro... > > I'll test the documentation, once you get round to doing that :-) > > -------- Ursprüngliche Nachricht -------- > Von: Paul King <pa...@asert.com.au> > Datum: 27.05.18 04:20 (GMT+01:00) > An: dev@groovy.apache.org > Betreff: Re: Groovy 2.5 @Macro ? > > Actually, if you look at src/test in groovy-macro, you'll see that the > macro methods and META-INF file are there. The deferred compilation > is achieved using assertScript. > > > On Sun, May 27, 2018 at 11:21 AM, Paul King <pa...@asert.com.au> wrote: > >> >> Macro expansion is done early (CONVERSION) and it expects to find the >> method it >> will be expanding into available on the classpath at that point. >> >> It is pretty much the same reasons as for extension modules: >> >> http://groovy-lang.org/metaprogramming.html#_extension_modules_and_classpath >> >> >> >> On Sun, May 27, 2018 at 10:02 AM, mg <mg...@arscreat.com> wrote: >> >>> Hi Paul, >>> >>> why this restriction ? I thought this feature was here to e.g. simply >>> support logging of the form >>> "$variableExpression.name=$variableExpression.value", etc: >>> >>> >>> https://github.com/bsideup/macro-methods-workshop/blob/master/src/test/groovy/com/example/SuperLoggerMacroTest.groovy >>> >>> ? >>> >>> Cheers, >>> mg >>> >>> >>> -------- Ursprüngliche Nachricht -------- >>> Von: Paul King <pa...@asert.com.au> >>> Datum: 27.05.18 01:50 (GMT+01:00) >>> An: dev@groovy.apache.org >>> Betreff: 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 <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 >>>> >>>> >>>> >>>> >>> >> >