Eclipse plugin 显示自定义悬停内的链接(Eclipse插件开发)

Eclipse plugin 显示自定义悬停内的链接(Eclipse插件开发),eclipse-plugin,hover,eclipse-rcp,eclipse-cdt,Eclipse Plugin,Hover,Eclipse Rcp,Eclipse Cdt,我在CDT编辑器中有一个自定义悬停(请参见链接的SO问题),现在我想在我的IAnnotationHover悬停中显示链接: public class MyAwesomeHover implements IAnnotationHover { @Override public String getHoverInfo(ISourceViewer sw, int ln) { return "<a href='www.stackoverflow.com'>so&

我在CDT编辑器中有一个自定义悬停(请参见链接的SO问题),现在我想在我的
IAnnotationHover
悬停中显示链接:

public class MyAwesomeHover implements IAnnotationHover {
    @Override
    public String getHoverInfo(ISourceViewer sw, int ln) {
        return "<a href='www.stackoverflow.com'>so</a>"
    }   
}
公共类MyAwesomeHover实现了iNotationHover{
@凌驾
公共字符串getHoverInfo(ISourceViewer sw,int ln){
返回“”
}   
}

不幸的是,链接没有显示-悬停窗口只显示简单文本(即“so”)。我尝试的其他HTML元素工作正常(ul、li、p、font…)。有人能帮我吗

如评论中所述,
RevisionHover
是一个很好的起点。神奇之处在于实现
iNotationHoverExtension
和创建自定义
AbstractReusableInformationControlCreator
。我发布了一个代码片段,其中包含了对我有效的解决方案

public class MyHover implements IAnnotationHover, IAnnotationHoverExtension {
...
    @Override
    public IInformationControlCreator getHoverControlCreator() {
        return new MyCreator();
    }
...
    @Override
    public Object getHoverInfo(ISourceViewer sv, ILineRange lr, int vnl) {
        return "<a href='www.stackoverflow.com'>so</a>";
    }
...
   private final class MyCreator extends AbstractReusableInformationControlCreator {

        protected IInformationControl doCreateInformationControl(Shell parent) {

                BrowserInformationControl control = 
                                    new BrowserInformationControl(
                                        parent, 
                                        JFaceResources.DIALOG_FONT, 
                                        false);
                control.addLocationListener(
                                    new LocationAdapter() {
                                        @Override
                                        public void changing(LocationEvent ev) {
                                            if (ev.location.startsWith("file:")) {
                                                // !This opens the link!
                                                openUrl(ev.location)    
                                            }
                                        }
                                    });
                return control;
        }
    }
}
公共类MyHover实现了IAnnotationHover、IAnnotationHover扩展{
...
@凌驾
公共信息控制创建者getHoverControlCreator(){
返回新的MyCreator();
}
...
@凌驾
公共对象getHoverInfo(ISourceViewer sv、ILineRange lr、int vnl){
返回“”;
}
...
私有最终类MyCreator扩展了AbstractReusableInformationControlCreator{
受保护的IIInformationControl doCreateInformationControl(外壳程序父级){
浏览器信息控制=
新浏览器信息控件(
父母亲
JFaceResources.DIALOG\u字体,
假);
control.addLocationListener(
新位置适配器(){
@凌驾
更改公共空间(位置事件ev){
if(ev.location.startsWith(“文件:”){
//!这将打开链接!
openUrl(ev.location)
}
}
});
返回控制;
}
}
}

问题链接:您是否查看了
修订悬停
?它实现了
iNotationHoverExtension
IInformationProviderExtension2
来显示自定义的悬停控件。它可能使用了JFace
HTMLTextPresenter
,它只支持有限的HTML子集,不包括
。谢谢大家,特别是@Rüdiger Herrmann!我通过iAnotationHoverExtension使它工作。稍后我将在这里发布答案和解决方案。