tips/eclipse/plugin開発/org.eclipse.ui.editors 拡張/02 EditorPart の生成で「サイトが異なっています」

2008-03-18 (火) 02:16:02 (4334d)

org.eclipse.ui.editors 拡張 : EditorPart の生成で「サイトが異なっています」

前述の editor プラグインがメニューに表示されない件

tips/eclipse/plugin開発/org.eclipse.ui.editors 拡張/01 ポップアップメニューの「開く」に表示されない

を解決して、 実際に選択できるようになったものの、 今度は Exception が発生してしまいました。
(日本語版なので)「サイトが異なっています」というメッセージなのですが、 何が原因なのか、まるで分からないです。

最低限の情報としてスタックトレースが表示されていて、 それによると org.eclipse.ui.internal.EditorManager#createSite 内で Exception が発生している模様。 Eclipse のソースの中からクラスを探し出し (internal なクラスのソースを見なくてはならないなんて!!)、 createSite 周辺のソースを読むと、 どうもこのメソッド内で生成した EditorSite インスタンスと、 createSite の引数となっている IEditorPart (おそらくプラグイン拡張を実装した EditorPart)の getSite もしくは getEditorSite と比較して、 異なっていると Exception としているようです。

生成した直後に他のオブジェクト(IEditorPart)のメンバーと比較? と疑問に思ってよく見てみると、 比較の直前に IEditorPart#init(IEditorSite, IEditorInput) を呼んでいる。
どうも IEditorSite を実装したクラスの init に IEditorSite を渡すので、 自分で保持しておけ、ということのようです。

そこまで判明したので、 EditorPart を継承したプラグイン拡張の雛形クラスの init で、 親クラスの init(super.init)を呼べばよいかと思ったのですが。。。
EditorPart#init は抽象メソッドとのこと。 雛形のクラスなんだから、最低限の実装はしていてくれればよいのに! しかもどう実装すればよいか明確な説明がない。。。 (少なくともヘルプやチュートリアルには)。

どうにか EditorPart.java を Eclipse のソースの中から探し出し、 init メソッドを見てみると、確かに抽象クラス。 しかもそのコメントには、「このように実装するのがよい」などと書いてあります。

どうにかコメントに書かれていたとおり記述すると、 ようやくエディターの UI が表示されるように。
長い道のりだった。。。
ソースを読まないと起動すらできないとは。
世間の人は普通にソースを読んで、普通にこんな問題はクリアしているのか?