2016-12-04 8 views
2

現在、Eclipseプラグインを作成中です。その中で、エディタをプログラムで開き、テキストの一部を選択したいと思います。開いたファイルをワークスペースにインポートする必要はありません(そのため、以下のコードでIFileStoreを使用しています)。Eclipse:プラグインからプログラムでXSDのテキストを選択

私はこのようなコード使用しています:それは正常に動作しますが、XMLスキーマ(XSD)のために、そうでないJavaファイルについては

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

を。エディタは開きますが、テキストは選択されません。

デバッグすると、その部分がorg.eclipse.wst.xsd.ui.internal.editor.InternalXSDMultiPageEditor型であることがわかり、選択マネージャはorg.eclipse.wst.xsd.ui.internalです。 adt.editor.CommonSelectionManager

私はEclipse MarsとNeonをターゲットにしていますが、両方で動作するとは思われません。

私はそれを動作させるために何ができますか?または少なくともいくつかの追加情報を見つける?

+0

エディターのソースコードを読んで、その内容を確認する必要があります。 –

+0

返事をありがとう。これらのクラスのソースリポジトリがどこにあるかわかりませんか?ソースJARを使ってダウンロードしましたが、git repoではダウンロードできませんでした。私がこれまで見てきたことから、現在サポートされていないように見えますが、もう少し調べてみたいと思います。 –

+0

これはEclipse WTP(Web Tools Project)の一部だと思います。 gitの場所は、[here](https://projects.eclipse.org/projects/webtools/developer)にリストされています。 –

答えて

0

WTPコードを見た後、現時点ではサポートされていないようです。

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

私はすべてのサブ部分にのみ特定のものに選択を送信した方がよいかどうかわからなかったが、これまでに送信:エディタは、マルチパートエディターである場合しかし、私は明示的にチェックすることで、回避策を見つけましたそれはすべてがうまくいくようです。

関連する問題