Создание гиперссылок в Xtext

#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 с return MyDslHyperlinkHelper.class; должно сработать? Или мне нужны дополнительные конфигурации?

3. Нет, это должно работать таким образом, и это сработало, когда я попробовал это. Вы пытались это отладить

4. Да, и у меня возникает ошибка при загрузке некоторых классов. Это ошибка «файл jar C:Program FilesJavajre7librt.jar не имеет исходного вложения». Как я могу устранить эту ошибку?

5. Спасибо, я решил эту проблему.