在我的语法中,我使用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);
}
但文件没有打开。为什么会这样?