我試圖實現一個自定義HoverProvider按照本教程:enter link description here註冊HoverProvider用的Xtend
但是,我堅持翻譯成的MyDSLUiModule
Java代碼的Xtend。 寄存器-方法應該讀這樣的:
def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() {
return MyDSLHoverProvider.class
}
然而,這不編譯自MyDSLHoverProvider
僅implements
的IEObjectDocumentationProvider
但不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
工具提示不會被觸發。
這是預期的行爲?
啊,是的,編譯錯誤消失了! :-)但是,工具提示仍未顯示。 'bindIEObjectDocumentationProviderr'方法被初始調用,但'MyDSLHoverProvider'中的方法從未被解僱。我更新了自己的帖子,在Eclipse啓動時給出了MyDSLHoverProvider的完整代碼以及一個奇怪的NPE的蹤跡。 –
你能給更多的上下文:語法,示例模型,你的impl和你如何測試它 –
我更新了我的開始帖子。我必須將我的字段重命名爲'name'才能顯示工具提示。這是預期的行爲? –