I figured out why: By default macros are using CompilePhase.CONVERSION and at this point the compiler doesn't care about types. That's why it didn't recognized neither "JsonOutput" (When using JsonOutput.toJson...) nor "groovy" (When using groovy.json.JsonOutput.toJson...):
The way it's working now is: Statement stmt = macro(CompilePhase.SEMANTIC_ANALYSIS, true) { groovy.json.JsonOutput($v{mapExpression}) } or... MethodCallExpression methodCall = macro(CompilePhase.SEMANTIC_ANALYSIS) { groovy.json.JsonOutput($v{mapExpression}) } ...in case you wanted to get the method call expression directly. Mario 2016-04-11 14:26 GMT+02:00 Mario Garcia <mario.g...@gmail.com>: > Hello: > > I'm playing a little bit with groovy-macro, BTW it's really cool how easy > you can create statements and expressions. > > However I'm having some issues when trying to create an static method call: > > * Statement callJsonOutput(final MapExpression mapExpression) {* > * return macro(true) { JsonOutput.toJson($v{ mapExpression }) }* > * }* > > When executing the test, it complains because "JsonOutput" class is not > found. That's correct, but I can't make it work either by doing: > > * Statement callJsonOutput(final MapExpression mapExpression) {* > * return macro(true) { groovy.json.JsonOutput.toJson($v{ > mapExpression }) }* > * }* > > Any ideas ? > Mario >