ありがとう、AbstractTextEditor の実装を調べてみました。エディター内のさまざまな場所間ではなく、エディター間のみを移動したいので、最も単純な実装は次のようになるはずだとわかりました。
public class MyEditor extends EditorPart implements INavigationLocationProvider {
public static final String ID = "MyEditor";
...
@Override
public INavigationLocation createEmptyNavigationLocation() {
return new MyNavigationLocation( this );
}
@Override
public INavigationLocation createNavigationLocation() {
return new MyNavigationLocation( this );
}
}
public class MyNavigationLocation extends NavigationLocation {
public MyNavigationLocation( IEditorPart part ) {
super( part );
}
@Override
public boolean mergeInto( INavigationLocation location ) {
return false;
}
@Override
public void restoreLocation() {
}
@Override
public void restoreState( IMemento memento ) {
}
@Override
public void saveState( IMemento memento ) {
}
@Override
public void update() {
}
}
私の問題は、それがまだ機能しないことです。失敗はどこか別の場所にあるに違いないと思います。たぶん、Eclipse コマンド構成に何かが欠けているのでしょう。何か案は?
編集:
問題は、クラス NavigationHistory の markLocation() メソッドにあります。プライベート メソッド addEntry() を呼び出します。私の場合、プライベート変数 ignoreEntries は 1 に設定されています。そのため、履歴に場所をマークすることはできません。残念ながら、 ignoreEntriesが 1 に設定されている理由はまだわかりません。Eclipse のドキュメントには、それについて何も書かれていません。
.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2FINavigationHistory.html
/*
* Adds a location to the history.
*/
private void addEntry(IEditorPart part) {
if (ignoreEntries > 0 || part == null) {
return;
}
...
}
2番目の編集:
新しいエディターが開かれるたびに、NavigationHistory の markEditor() メソッドを介して履歴エントリが追加されることがわかりました。マーキングは表示スレッドで行われ、マーキング手順が終了するまでマーキングを追加することはできません。エディターを開いた直後に場所をマークしたい場合は、表示スレッドで markLocation() を呼び出す必要があります。それにもかかわらず、私の問題はまだ存在します。NavigationHistory の前後の NavigationHistoryAction は null です。そのため、UI アイコンが灰色のままになっています。ナビゲーション コマンドが指定されている plugin.xml の一部を送ってもらえますか? 次に、それを自分の構成と比較できます。