使用Xtend注册HoverProvider

时间:2016-09-16 10:09:49

标签: xtext xtend

我尝试根据本教程实现自定义HoverProvider:enter link description here

但是,我很难将MyDSLUiModule的Java代码转换为Xtend。 register-method应如下所示:

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

但是,这不会编译,因为MyDSLHoverProvider只有implements IEObjectDocumentationProviderextend这个类(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

未触发工具提示。

这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

正确的Xtend语法是

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

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

MyDSLHoverProvider.class与Java中的MyDslHoverProvider.class.getClass()相同