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

我尝试使用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将新属性显示为有效属性,但是随后无法编译。

java - Eclipse Groovy DSLD和静态编译-LMLPHP
java - Eclipse Groovy DSLD和静态编译-LMLPHP

同时使用@CompileStatic@TypeChecked也会出现相同的结果。

最佳答案

DSLD在内容辅助和类型推断中引入了新的方法和属性。这不能保证方法或属性在编译或运行时可用。它们比任何东西都更像提示。

通常,DSLD用于填补静态类型检查器和程序的动态执行状态之间存在的空白。如果要与@TypeChecked@CompileStatic兼容的内容,则可能需要编写TypeChekingExtension而不是DSLD。

09-12 19:39