#xtext
#xtext
Вопрос:
В моей грамматике я использую importURI=STRING
.
Теперь мне нужно создать гиперссылку для СТРОКИ.
Я создаю MyDslHyperlinkHelper
в пакете mydsl.ui.navigation
. И я добавляю в файл MyDslUiModule этот метод:
@Override
public Class<? extends IHyperlinkHelper> bindIHyperlinkHelper() {
return MyDslHyperlinkHelper.class;
}
Но метод void createHyperlinksByOffset(XtextResource resource, int offset, IHyperlinkAcceptor acceptor)
класса MyDslHyperlinkHelper
никогда не выполняется.
Можете ли вы объяснить мне, почему?
Редактировать:
У меня есть этот код:
@Override
public void createHyperlinksByOffset(XtextResource resource, int offset,
IHyperlinkAcceptor acceptor) {
INode node = NodeModelUtils.findLeafNodeAtOffset(resource.getParseResult().getRootNode(), offset);
if (node != null amp;amp; node.getGrammarElement() instanceof RuleCall amp;amp; node.getSemanticElement() instanceof Import) {
if (ga.getSTRINGRule().equals(((RuleCall)node.getGrammarElement()).getRule())) {
Import i = (Import) node.getSemanticElement();
String uriString = i.getImportURI();
URI uri = URI.createURI(uriString);
final URIConverter uriConverter = resource.getResourceSet().getURIConverter();
final URI normalized = uri.isPlatformResource() ? uri : uriConverter.normalize(uri);
final URI targetURI = gsp.getResourceDescriptions(resource, Lists.newArrayList(normalized)).getResourceDescription(normalized).getURI();
XtextHyperlink result = hyperlinkProvider.get();
result.setURI(targetURI);
Region region = new Region(node.getOffset(), node.getLength());
result.setHyperlinkRegion(region);
result.setHyperlinkText(uriString);
result.open();
acceptor.accept(result);
}
}
super.createHyperlinksByOffset(resource, offset, acceptor);
}
Но файл не открылся. Почему это происходит?
Комментарии:
1. я не могу воспроизвести это. как выглядит impl?
2. На данный момент я использую только метод print in
createHyperlinksByOffset
. Но когда я создаю это,bindIHyperlinkHelper
с returnMyDslHyperlinkHelper.class;
должно сработать? Или мне нужны дополнительные конфигурации?3. Нет, это должно работать таким образом, и это сработало, когда я попробовал это. Вы пытались это отладить
4. Да, и у меня возникает ошибка при загрузке некоторых классов. Это ошибка «файл jar C:Program FilesJavajre7librt.jar не имеет исходного вложения». Как я могу устранить эту ошибку?
5. Спасибо, я решил эту проблему.