java - eclipse todo快捷键



Eclipse-悬停在标记上的自定义文本 (1)

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

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

然后我使用反射来设置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());

我在Eclipse插件上工作,目前我正在试图让Eclipse(Luna)在鼠标悬停时显示自定义文本。 我知道我可以通过指定标记参数来实现这一点,但是我需要动态地改变文本 ,例如:

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

1)有一个定制的TextEditor与自定义SourceViewerConfiguration

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是这样的:

<extension
        point="org.eclipse.ui.editors">
    <editor
            id="test"
            name="MyEditor"
            extensions="c"
            class="foo.bar.editors.MyEditor">
    </editor>
</extension>

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

2)动态添加自定义注释悬停。 我在这里发现信息是可能的。 所以每次我打开一个“* .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根本没有被调用。

任何想法我做错了什么?





markers