Eclipse Groovy DSLD和静态编译

问题描述:

是否可以定义可以静态编译的Eclipse Groovy DSLD(DSL定义)?Eclipse Groovy DSLD和静态编译

我试图用通过的Eclipse提供DSLD例子,所以我创建TestDsl.dsld

contribute(currentType(subType('groovy.lang.GroovyObject'))) { 
    property (
     name : 'newProp', 
     type : String, 
     provider : 'Sample DSL', 
     doc : 'This is a sample. You should see this in content assist for GroovyObjects: <pre>newProp</pre>') 
} 

然后我写了使用以前的性能测试类。这个类应该静态编译。 Eclipse正在将新属性显示为有效的属性,但之后无法编译。

同样的结果发生同时使用@CompileStatic@TypeChecked

DSLD将新的方法和属性引入内容辅助和类型推理。这并不保证这些方法或属性将在编译或运行时可用。他们的操作比任何事情都更像提示。

很多时候,DSLD用于填补静态类型检查器和程序动态执行状态之间存在的差距。如果您想要的内容与@TypeChecked@CompileStatic兼容,则可能需要编写TypeChekingExtension而不是DSLD贡献。

+0

是的,你说得对。我终于写了一个'ASTTransformation',因为'TypeCheckingExtension'对于我想做的事情来说太有限了。 – sinuhepop