2016-12-04 1 views
2

Ich schreibe gerade ein Eclipse-Plugin. Darin möchte ich einen Editor programmgesteuert öffnen und einen Teil des Textes auswählen. Die geöffnete Datei muss nicht in den Arbeitsbereich importiert werden (deshalb verwende ich IFileStore im folgenden Code).Eclipse: Wählen Sie Text in XSD programmatisch aus Plugin

I-Code bin mit diesem ähnlich ist:

IFileStore fileStore = EFS.getLocalFileSystem().getStore(localPath); 
IEditorPart part = IDE.openEditorOnFileStore(page, fileStore); 
final int posStart = ...; 
final int posEnd = ...; 
part.getEditorSite().getSelectionProvider().setSelection(
        new TextSelection(posStart, posEnd - posStart)); 

Für Java-Dateien es funktioniert gut, aber für XML-Schema (XSD), es funktioniert nicht. Der Editor öffnet sich, aber es ist kein Text ausgewählt.

Vom Debuggen kann ich sagen, dass das Teil vom Typ org.eclipse.wst.xsd.ui.internal.editor.InternalXSDMultiPageEditor ist, und der Auswahlmanager ist ein org.eclipse.wst.xsd.ui.internal. adt.editor.CommonSelectionManager

Ich ziele auf Eclipse Mars und Neon, es scheint nicht für beide zu arbeiten.

Was kann ich tun, damit es funktioniert? Oder finden Sie zumindest weitere Informationen?

+0

Sie müssen den Quellcode des Editors lesen, um zu sehen, was es unterstützt. –

+0

Danke für die Antwort. Hast du eine Ahnung, wo ich das Quell-Repository für diese Klassen finde? Ich habe einen Download mit Quell-JARs gefunden, aber nicht mit dem Git-Repo. Von dem, was ich bisher gesehen habe, sieht es so aus, als ob es zur Zeit nicht unterstützt wird, aber ich würde das gerne etwas genauer untersuchen. –

+0

Ich denke, das ist Teil von Eclipse WTP (Web Tools Project). Die Git Locations für diese sind hier aufgelistet (https://projects.eclipse.org/projects/webtools/developer) –

Antwort

0

Nachdem wir uns den WTP-Code angeschaut haben, wird dies zur Zeit anscheinend nicht unterstützt. Aber ich fand eine Abhilfe, indem Sie explizit überprüft, ob der Editor ein Multi-Part-Editor ist:

private static void setSelection(IEditorPart part, TextSelection textSelection) { 
    if (part instanceof MultiPageEditorPart) { 
     final MultiPageEditorPart multiPage = (MultiPageEditorPart) part; 
     for (final IEditorPart subPart : multiPage.findEditors(multiPage.getEditorInput())) { 
      setSelection(subPart, textSelection); 
     } 
    } else { 
     part.getEditorSite().getSelectionProvider().setSelection(textSelection); 
    } 
} 

Ich war nicht sicher, ob es besser ist, die Auswahl auf alle Unterteile zu senden oder nur auf einen bestimmten, aber bisher Senden Es scheint alles zu funktionieren.

Verwandte Themen