Eclipse – 将鼠标hover在标记上时的自定义文本

我正在研究Eclipse插件,目前我正在尝试让Eclipse(Luna)在hover在标记上时显示自定义文本。 我知道我可以通过指定标记参数来实现这一点,但我需要动态更改文本 ,例如:

用例

我已经尝试过这些方法但没有成功:

1)使用自定义SourceViewerConfiguration自定义TextEditor

 public class MyEditor extends TextEditor { public MyEditor() { setSourceViewerConfiguration(new SourceViewerConfiguration() { @Override public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new IAnnotationHover() { @Override public String getHoverInfo(ISourceViewer sv, int ln) { return "Hello world!"; } }; } }); } } 

和plugin.xml这样:

     

我的方法getHoverInfo永远不会被调用。 相反, 只要我打开任何* .c文件并将鼠标hover在标记上,就会调用DefaultAnnotationHover中的方法getHoverInfo 。 我通过Eclipse-> Preferences-> General-> Editors检查了可用的编辑器, MyEditor就在那里。

2)动态添加自定义注释hover。 我在这里找到了可能的信息。 所以每次打开“* .c”文件时,我都有这样的代码:

 IPartListener2 partListener2 = new IPartListener2() { @Override public void partOpened(IWorkbenchPartReference partRef) { if ("org.eclipse.cdt.ui.editor.CEditor".equals(((EditorReference) partRef).getDescriptor().getId())) { CEditor currentCFileEditor = ((CEditor)((EditorReference) partRef).getEditor(false)); currentCFileEditor.getViewer().setAnnotationHover(new IAnnotationHover() { @Override public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { return "Hello world"; } }); } } 

但同样,我没有成功 – 我的getHoverInfo根本没有被调用。

知道我做错了什么吗?

对于那些有类似问题的人 – 我找到了一个“hacky”解决方案。 我创建了自己的类MyAwesomeHover

 public class MyAwesomeHover implements IAnnotationHover { @Override public String getHoverInfo(ISourceViewer sw, int ln) { return "Hey hoo" } } 

然后我使用reflection将MyAweseomeHover设置为显示的AnnotationHover

  Field hm= SourceViewer.class.getDeclaredField("fVerticalRulerHoveringController"); hm.setAccessible(true); AnnotationBarHoverManager ma= (AnnotationBarHoverManager) hm.get(sourceViewer); Field ah= AnnotationBarHoverManager.class.getDeclaredField("fAnnotationHover"); ah.setAccessible(true); ah.set(ma, MyAwesomeHover());