在Xtext中创建超链接

时间:2014-07-03 00:04:36

标签: xtext

在我的语法中,我使用importURI=STRING

现在,我需要为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 && node.getGrammarElement() instanceof RuleCall && 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);
        }

但文件没有打开。为什么会这样?

0 个答案:

没有答案