ich eine groovige DSL mit Syntax schreiben wollen:Compilation Customizer nicht während der Kompilierung von groovy DSL-Skript namens
returnValue when booleanCondition
Ich möchte Kompilation customizers verwenden diesen Ausdruck einer typischen zu transformieren, wenn return-Anweisung AST-Transformationen .
Für dieses Skript:
2 when 1 == 1
ich Ausnahmemeldung:
MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: expecting EOF, found '1' @ line 1, column 8.
Ich verstehe nicht, warum meine Sammlung Customizer nicht aufgerufen wird? Ich brauche es vor der Kompilierung aufgerufen werden, damit ich es in einen gültigen groovy Code machen kann.
Wenn das Skript gültigen Groovy-Code enthält, wird mein Kompilierungs-Customizer aufgerufen.
Mein Code:
class MyDslTest {
public static void main(String[] args) {
String script = '''2 when 1 == 1
'''
def compilerConfig = new CompilerConfiguration()
compilerConfig.addCompilationCustomizers(new MyCompilationCustomizer())
GroovyShell groovyShell = new GroovyShell(compilerConfig)
groovyShell.evaluate(script)
}
}
class MyCompilationCustomizer extends CompilationCustomizer {
MyCompilationCustomizer() {
super(CompilePhase.CONVERSION)
}
@Override
void call(SourceUnit source, GeneratorContext context, ClassNode classNode) throws CompilationFailedException {
println 'in compilation customizer'
}
}