java - Eclipse-testo personalizzato quando si passa con il mouse su un marker



hover markers (1)

Per coloro che hanno un problema simile, ho trovato una soluzione "hacky". Ho creato la mia classe MyAwesomeHover :

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

E poi uso il riflesso per impostare MyAweseomeHover come l' AnnotationHover visualizzato.

    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());

Sto lavorando su un plugin Eclipse e attualmente sto cercando di rendere Eclipse (Luna) per mostrare il testo personalizzato quando si passa il mouse su un marker. So che potrei ottenere questo specificando gli argomenti dei marker, ma ho bisogno di cambiare il testo in modo dinamico , ad esempio:

Ho già provato questi approcci senza successo:

1) Avere un TextEditor personalizzato con SourceViewerConfiguration personalizzato:

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!";
                    }
                };
            }
        });
    }
}

e il plugin.xml piace questo:

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

Il mio metodo getHoverInfo non viene mai chiamato. Invece, il metodo getHoverInfo di DefaultAnnotationHover viene chiamato ogni volta che apro un file * .c e passa il mouse sopra l'indicatore. Ho controllato gli editor disponibili tramite Eclipse-> Preferences-> General-> Editors e MyEditor è lì.

2) Aggiungendo l'annotazione personalizzata al passaggio del mouse in modo dinamico. Ho trovato qui informazioni che è possibile. Quindi ogni volta che apro un file "* .c", ho questo codice:

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";
                    }
                });
            }
        }

Ma ancora una volta, non ho avuto successo - il mio getHoverInfo non è chiamato affatto.

Qualche idea su cosa sto facendo male?





markers