Planet Eclipse経由で流れていた良記事を翻訳してみた。Eclipse Tipsの記事です。

翻訳の元記事

http://blog.eclipse-tips.com/2009/01/top-10-mistakes-in-eclipse-plug-in.html

元のタイトルは「Top 10 mistakes in Eclipse Plug-in Development」なので、「Eclipseプラグイン開発の間違いトップ10」の方が正しいんだろう。10位から順番に上がっていきます。また、画像は引用していません。

引用ここから

私はEclipseプラグイン開発をし始めた方をトレーニングしてきました。そしていつも同じように間違えてしまう点を見つけました。そこで今回、そうやって見つけてきた10の良くある過ちを一覧にしました。もしあなたがこれらの間違いをしていたとしても、それはあなただけのことではないのです。

(10) JavaDocを読まない

これは特にEclipseプラグイン開発に限った話ではありません。Javaプログラマーにとって共通の話題だし、もっと言えば全てのプログラマーにとって同じことでしょう。そう、ドキュメントを読まないことです。どれだけ多くの、継承してはいけないクラスや実装をプラグイン開発者であるあなたからされることが考えられていないインターフェースがあるか知っていますか？もちろんAPIツールはあなたを助けてくれますが、JavaDocを読むのとは違った角度からの助けでしょう。私はいつも間違いを犯します。正直に言えば長い間、Commandのhandlerはnullを返されることが仮定されていることを知りませんでした。(これは実行結果です。)あなたはいつこれを知りましたか？

念のために言うと、JDTが提供しているJavaDocビューを使うとJavaDocが整形されて表示されます。

(9) デフォルトコンストラクタを追加することを忘れる あなたがナイスなウィザードクラスを作りました。そしてウィザードダイアログの中に入れて動かしてみるとちゃんと動きます。でもINewWizardと一緒に動かそうとすると動きません。その後「ちょっと」デバッグしてみると、ウィザードクラスの中でデフォルトコンストラクタが定義されていないことを見つけました！そう、これはウィザードクラスに限った話ではなく、plugin.xmlに記述する、"class"属性で書くクラス全てにデフォルトコンストラクタが必要です。これらのクラスはリフレクションを使ってインスタンスが作成されるためです。

(8) 異なったプラグインに分割していない 新規開発者の間で共通して良くみられます。かれらは全てのものを一つのプラグインにしてしまう傾向があるのです。幾つかのプラグインに分けることでコードを分けることはモジュール性や保守性を上げるでしょう。あなたは少なくともUI部分とコア部分に分けるべきです。そうすることでコア部分のテストを行うことを簡単に行えるでしょう。



(6) クラスパスを直接指定している。 全てのプラグインプロジェクトはJavaプロジェクトでもあります。しかしそれはあなたが必要とするJarファイルをJavanoクラスパスに追加すればいい、というものではありません。なぜならプラグインの実行時のクラスパスはそれとは異なるからです。もしJarをクラスパスに追加したいのであれば、RuntimeタブにあるClasspathセクションでAddボタンを押してください。

(4) 空のdisposeメソッド この黄金律は忘れないでください。「何かを作ったら、捨てる(dispose)」。SWTのリソース、例えば画像やフォントはいつも使い終わったらdisposeメソッドを呼ぶこと。私はたくさんの人たちがこれをするのを忘れているのをみてきました。他にもdisposeメソッドをオーバーライドしたときにsuper.dispose()を呼んで親クラスで作られたプロパティのdisposeを確保してください。また、IPartListenerやIResourceChageListenerなど、あなたのクラスがライフサイクルを終えたらこれらのリスナーを確実に削除するよう、disposeメソッドで削除してください。

(3) monitor.isCanceled()を無視している あなたのJobは非常に長期に渡る仕事をしていて、ユーザーがキャンセルをしたいとしますよね。そういう時はProgressMonitorダイアログやウィザード、またはProgressViewからキャンセルを押すことで終了できます。キャンセルボタンを押すと、IProgressMonitorはキャンセルフラグをtrueにするだけです。あなたは一定の期間でisCancelled()をチェックし、操作を終了させるようにする責任があります。ユーザーが"キャンセル"を押した後に何も起きなかったら、信じてほしいんですが、それはとても悪いユーザーエクスペリエンスでしょう。

