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 贡献。
是否可以定义可静态编译的 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 贡献。