是否可以定义可以静态编译的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将新属性显示为有效属性,但是随后无法编译。
同时使用
@CompileStatic
和@TypeChecked
也会出现相同的结果。 最佳答案
DSLD在内容辅助和类型推断中引入了新的方法和属性。这不能保证方法或属性在编译或运行时可用。它们比任何东西都更像提示。
通常,DSLD用于填补静态类型检查器和程序的动态执行状态之间存在的空白。如果要与@TypeChecked
或@CompileStatic
兼容的内容,则可能需要编写TypeChekingExtension
而不是DSLD。