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贡献。
是的,你说得对。我终于写了一个'ASTTransformation',因为'TypeCheckingExtension'对于我想做的事情来说太有限了。 – sinuhepop