2016-04-13 4 views
0

のコンパイル時に呼び出されません。このスクリプトのコンパイルカスタマイザーは、私は構文でグルーヴィーなDSLを書きたいグルーヴィーDSLスクリプト

:私のコンパイル・カスタマイザーがまったく呼び出されない理由を私は理解していない

MultipleCompilationErrorsException: startup failed: 
Script1.groovy: 1: expecting EOF, found '1' @ line 1, column 8. 

2 when 1 == 1 

私は例外メッセージが表示されますか? コンパイルの前に呼び出される必要があるので、有効なグルーヴィーコードにすることができます。

スクリプトに有効な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' 
    } 
} 

答えて

2

問題は、あなたのコードが構文的に有効ではないということです。コンパイルカスタマイザは、カスタマイザが動作するASTを取得するには、構文的に正しいコードを生成する必要があります。 1つのオプションは別のAntlrParserPluginを使用することですが、一般に、解析する前にソースを変更するため、ASTと実際のソースとの間に不一致が生じるため、お勧めしません。

関連する問題