Я пытаюсь реализовать пользовательский HoverProvider в соответствии с этой обучающей программы: enter link description hereРегистрация HoverProvider с Xtend
Однако я застрял перевод на Java код MyDSLUiModule
к 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>
Как я могу обойти эту ошибку?
Btw: Если я проверить мой DSL в экземпляре Eclipse, я получаю странную 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) 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>";
}
}
}
Edit: Я нашел способ отображения всплывающих подсказок, но это кажется странным. всплывающей подсказке отображается для этого правила:
name = ID
, но если я переименовать его в
myField = ID
подсказка не срабатывает.
Является ли это ожидаемым поведением?
Ах, да, исчезла ошибка компиляции! :-) Однако всплывающая подсказка пока не отображается. Метод 'bindIEObjectDocumentationProviderr' определенно называется, но метод в MyDSLHoverProvider никогда не запускается. Я обновил свой пост, чтобы дать полный код «MyDSLHoverProvider» и трассировку прообразного NPE при запуске Eclipse. –
Можете ли вы дать больше контекста: грамматика, примерная модель, ваш impl и как вы ее тестируете –
Я обновил свой стартовый пост. Мне нужно было переименовать свои поля в 'name', чтобы отобразить всплывающие подсказки. Это ожидаемое поведение? –