メイン

plugin 作成 アーカイブ

2006年12月07日

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

(eclipse plugin 開発はまだ始めたばかりなので、このカテゴリは本当に覚え書です)

プラグイン・プロジェクトを作成し、 マニフェストエディターに従ってとりあえず org.eclipse.ui.editors 拡張ポイントに拡張を作成、 クラスが自動生成されるのでそのまま「実行」-「Eclipse アプリケーション」してみると、、、。
左側のエクスプローラ上のファイルを右クリックしても、開くアプリケーション候補の中に、 今作った editor プラグインがない。。。

実は、拡張エレメントの extensions に明示的に開くファイルの拡張子を指定しないと、 「開く」メニューの候補に現れないのです。。。
(てっきり、何も指定しなければすべてのファイルの「開く」メニューに表示されるかと思いました)。 ちなみに「*」と指定しても、すべてのファイルという意味にはならないようです。 ということは拡張子のないファイルの「開く」メニューに結び付けられない? (matchingStrategy を使えばできるのか? そこはまだ未調査)

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 が表示されるように。
長い道のりだった。。。
ソースを読まないと起動すらできないとは。
世間の人は普通にソースを読んで、普通にこんな問題はクリアしているのか?

IFileEditorInput は IEditorInput と同じプラグイン内にない

ようやく EditorPart#init に記述すべきことが分かって、 あとはコメントにある雛形を書き写せば、と思ってそのままコピーしたらなぜかエラーが。 どうも IFileEditorInput(IEditorInput のサブインターフェイス)が見つからないらしい。 IEditorInput は見つけられている(ビルドパス内にいる)のに? 同じプラグイン内にないのか?

仕方がないのでまた Eclipse のソースの山から IFileEditor.java を検索。 どうやら org.eclipse.ui.ide にあるらしい。 このプラグインを、自分のプラグインプロジェクトの依存関係に追加して、ようやく IFileEditorInput が使えるように。 そして無事ファイルの右クリック-「開く」で簡単なコンポーネントが開くところまでこぎつけました。 長い道のりだった。。。

About plugin 作成

ブログ「240K DEV」のカテゴリ「plugin 作成」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。