2015-11-05 118 views
0

我正在開發一個使用Groovy作爲腳本語言的RCP應用程序。我包含了Groovy-Eclipse插件,讓應用程序用戶使用Groovy編輯器在應用程序中編寫Groovy代碼。在RCP應用程序中使用Groovy-Eclipse插件中的Groovy編輯器

Groovy腳本必須使用應用程序中的一些Java類,我如何在Groovy編輯器中爲這些類添加可見性,以儘可能透明地向用戶提供代碼完成等功能。

要執行Groovy腳本,我正在使用GroovyShell,並向傳遞給GroovyShell構造函數的Binding添加一個屬性。

此屬性是一個地圖,我把相關的一些對象,以我的應用程序:

HashMap<String, Object> plx = new HashMap<String, Object>(); 
plx.put("element", new Element("xxx")); 
Binding binding = new Binding(); 
binding.setProperty("plx", plx); 

試想一下,元素是這樣

class Element 
{ 
    String name; 
    public Element(String name) 
    { 
    this.name = name; 
    } 
    public String getName() 
    { 
    return name; 
    } 
} 

我能寫並執行以下定義的Java類Groovy腳本沒有問題

println plx.element.name 

我得到正確的結果:xxx

我遇到的問題是我不知道如何修改編輯器使用的類路徑,讓它在我的應用程序中編輯腳本時解析Element類以啓用代碼完成。

回答

1

每次在RCP中執行腳本時是否要啓動新的VM,還是希望在當前正在運行RCP的同一VM中運行Groovy腳本?你的問題對我來說有點過於通用......如果是後者,確保你已經將Java類添加到插件依賴項中,否則在編譯時就不會解決它。

如果您想在不顯式導入腳本的情況下使用您的類,則可以透明地添加導入。 http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

您還可以通過綁定將任何服務或實例注入到腳本中。它基本上是關鍵值的映射。

一旦您的Java類位於類路徑中,您的腳本中就可以使用它們的內容幫助。如果您需要內容協助提案中的進一步自定義,請查看此優秀帖子以獲取有關實際實施的更多詳細信息。 http://contraptionsforprogramming.blogspot.de/2009/12/extending-groovy-eclipse-for-use-with.html

希望這會有所幫助。

+0

感謝@kittaakos爲您的迴應。我剛剛編輯了我的問題,以澄清它。我的問題不在於運行時間,而是編輯時間。 –

+1

全部清楚,這是由[groovy推理引擎]完成的(http://contraptionsforprogramming.blogspot.de/2009/11/how-type-in​​ferencing-for-groovy-in.html)。您可以創建自己的實現並將其插入到RCP中。我有這種感覺,你必須手動實現它。至少我現在沒有更好的想法了。這不是火箭科學,它只是需要一些努力才能完成。也尋找org.eclipse.jdt.groovy.core.typeLookup延伸點。 – kittaakos

+0

非常感謝,我會按照你的建議。 –

相關問題