« org.eclipse.ui.editors 拡張 : ポップアップメニューの「開く」に表示されない | メイン | IFileEditorInput は IEditorInput と同じプラグイン内にない »

2006年12月07日

EditorPart の生成で「サイトが異なっています」

前述の editor プラグインがメニューに表示されない件を解決して、 実際に選択できるようになったものの、今度は 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 が表示されるように。
長い道のりだった。。。
ソースを読まないと起動すらできないとは。
世間の人は普通にソースを読んで、普通にこんな問題はクリアしているのか?

投稿者 kyohei : 2006年12月07日 02:14

トラックバック

このエントリーのトラックバックURL:
http://240k.jp/cgi-bin/MT333/mt-tb.cgi/360

コメント

コメントしてください




保存しますか?