Я хочу написать заводной DSL с синтаксисом:Составление настройщик не вызывается во время компиляции заводной DSL сценария
returnValue when booleanCondition
Я хочу использовать компиляции настройщиков, чтобы преобразовать это выражение к типичным, если оператор возврата с использованием AST преобразований ,
Для этого сценария:
2 when 1 == 1
Я получаю сообщение об исключении:
MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: expecting EOF, found '1' @ line 1, column 8.
Я не понимаю, почему мой сборник настройщик не называется вообще? Мне нужно, чтобы он был вызван перед компиляцией, поэтому я могу превратить его в действительный код groovy.
Если скрипт содержит действительный код groovy, то вызывается мой компилятор.
Мой код:
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'
}
}