2017-07-04 68 views
1

是否可以定義可以靜態編譯的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

回答

1

DSLD將新的方法和屬性引入內容輔助和類型推理。這並不保證這些方法或屬性將在編譯或運行時可用。他們的操作比任何事情都更像提示。

很多時候,DSLD用於填補靜態類型檢查器和程序動態執行狀態之間存在的差距。如果您想要的內容與@TypeChecked@CompileStatic兼容,則可能需要編寫TypeChekingExtension而不是DSLD貢獻。

+0

是的,你說得對。我終於寫了一個'ASTTransformation',因爲'TypeCheckingExtension'對於我想做的事情來說太有限了。 – sinuhepop