我尝试根据本教程实现自定义HoverProvider:enter link description here
但是,我很难将MyDSLUiModule
的Java代码转换为Xtend。
register-method应如下所示:
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-09-16 16:42:34.203 !MESSAGE java.lang.NullPointerException !堆栈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) 在org.eclipse.oomph.setup.ui.SetupUIPlugin $ 1 $ 1.run(SetupUIPlugin.java:241) 在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
未触发工具提示。
这是预期的行为吗?
答案 0 :(得分:1)
正确的Xtend语法是
def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() {
return MyDSLHoverProvider
}
或
def Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProviderr() {
MyDSLHoverProvider
}
MyDSLHoverProvider.class
与Java中的MyDslHoverProvider.class.getClass()
相同