Eclipse Groovy DSLD 和静态编译

Eclipse Groovy DSLDs and static compilation

是否可以定义可静态编译的 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>')
}

然后我用之前的属性写了一个测试class。这个 class 应该静态编译。 Eclipse 将新 属性 显示为有效的,但随后无法编译。

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

DSLD 将新方法和属性引入到内容辅助和类型推断中。这不保证方法或属性在编译时或 运行 时可用。它们的操作更像是提示。

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