2016-09-16 58 views
1

我試圖實現一個自定義HoverProvider按照本教程:enter link description here註冊HoverProvider用的Xtend

但是,我堅持翻譯成的MyDSLUiModule Java代碼的Xtend。 寄存器-方法應該讀這樣的:

def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() { 
    return MyDSLHoverProvider.class 
} 

然而,這不編譯自MyDSLHoverProviderimplementsIEObjectDocumentationProvider但不extend這個類(MyDSLHoverProvider相同的教程)。

因此引發此錯誤: Type mismatch: cannot convert from Class<? extends Class> to Class<? extends IEObjectDocumentationProvider>

我怎樣才能解決這個問題?

順便說一句:如果我在Eclipse實例測試我的DSL,我得到一個奇怪的NPE:

ENTRY org.eclipse.oomph.setup.ui 2 0 2016年9月16日16時42分: 34.203 !消息顯示java.lang.NullPointerException !STACK 0 顯示java.lang.NullPointerException 在org.eclipse.oomph.setup.ui.SetupUIPlugin.performStartup(SetupUIPlugin.java:373) 在org.eclipse.oomph.setup .ui.SetupUIPlugin.access $ 4(SetupUIPlugin.java:344) at org.eclipse.oomph.setup.ui.SetupUIPlugin $ 1 $ 1.run(SetupUIPlugin.java:241) at org.eclipse.core.internal .jobs.Worker.run(Worker.java:55)

我不知道這個異常來自何處。

類MyDSLHoverProvider看起來是這樣的:

import org.eclipse.emf.ecore.EObject 
import org.eclipse.xtext.documentation.IEObjectDocumentationProvider 

class MyDSLHoverProvider implements IEObjectDocumentationProvider { 

    override getDocumentation(EObject o) { 
     println("Hover: " + o) 
     if (o instanceof MyFieldElements) { 
      return "This is a nice Greeting with nice <b>markup</b> in the <i>documentation</i>"; 
     } 
    } 

} 

編輯: 我找到了一種方法來顯示工具提示,但它似乎很奇怪。 工具提示顯示該規則:

name = ID 

,但如果我把它重新命名爲

myField = ID 

工具提示不會被觸發。

這是預期的行爲?

回答

1

正確的Xtend的語法是

def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() { 
    return MyDSLHoverProvider 
} 

def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() { 
    MyDSLHoverProvider 
} 

MyDSLHoverProvider.class是Java一樣MyDslHoverProvider.class.getClass()

+0

啊,是的,編譯錯誤消失了! :-)但是,工具提示仍未顯示。 'bindIEObjectDocumentationProviderr'方法被初始調用,但'MyDSLHoverProvider'中的方法從未被解僱。我更新了自己的帖子,在Eclipse啓動時給出了MyDSLHoverProvider的完整代碼以及一個奇怪的NPE的蹤跡。 –

+0

你能給更多的上下文:語法,示例模型,你的impl和你如何測試它 –

+0

我更新了我的開始帖子。我必須將我的字段重命名爲'name'才能顯示工具提示。這是預期的行爲? –