Home > Eclipse

Eclipse Archive

Eclipseでスニペットを使ったり拡張したり

スニペット(Snippet)は”断片”のことであり、一般的には、コピペで使えるコードサンプルなどのことを言いますが、Eclipseではエディタ上で定型文を挿入する機能のことを言います(というかそう呼ぶことにします、面倒だから)。

かなり便利な機能なのですが、そんなに活用している人を見かけないので紹介(゜-゜=)

スニペットビューを表示するには[ウィンドウ]→[ビューの表示]→[その他]でダイアログを表示し、「一般」フォルダの中の「スニペット」をクリックします。

ビュー上で右クリック→[カスタマイズ]でユーザが独自に”断片”を登録することができ、インポートやエクスポートも行えるのですが、このとき、ユーザが独自に登録したスニペットは以下のディレクトリにxmlファイルとして保存されます。

{$workspace}\.metadata\.plugins\org.eclipse.wst.common.snippets

※ $workspace は各自のworkspace

このディレクトリ名を見るとわかる通り、スニペットビューはWST(Web Standard Tools)によって提供されています。”Web”と言いつつ、ほぼすべてのEclipseパッケージに付属している(気がする)プラグインなので、 Eclipseプラットフォーム標準の機能であるかのように使えるわけですね。

そしてさらに、このスニペットビューにはextension point「SnippetContributions」が定義してあるため、プラグイン開発者はスニペットビューを拡張することもできます。
この辺は以下のドキュメントを参照してください。単純に挿入したいテキストの設定ならplugin.xmlに書くだけでよいです。

Help – Eclipse SDK

contenttypesとextensionsが思ったように動いてくれないよぅ…(´・ω・`)

■ 参考
WST Common Snippets subcomponent Overview

Eclipseプラグイン開発:TreeViewerの状態管理

TreeViewerのメモ。

ツリーの展開状況の取得と設定

ツリーの状態を保存しておくにはTreeViewer#getExpandedElements()を使います。

  1.  // 取得する
  2.  Object[] expandedNodes = viewer.getExpandedElements();
  3.  
  4.  // なんか処理して
  5.  
  6.  // 設定する
  7.  viewer.setExpandedElements(expandedNodes);

TreeViewerのときは取得できるObjectはTreeNodeオブジェクトです。
TreeNodeはコンストラクタでObjectを引数に取り、このObjectのequalsによってTreeNodeの同位性も決まります。

ツリーの開閉時に実行されるリスナーの設定

TreeListenerなるものをviewerに設定しておきます。
ここで気をつけるのはイベントの各メソッドが呼ばれた時点ではツリーの状態は開いていない(閉じていない)ということです。
例えば、treeExpanded内でTreeViewer#getExpandedElements()をコールするとトリガとなったノードは取得できません。TreeExpansionEvent#getElement()で取得します。

  1.  viewer.addTreeListener(new ITreeViewerListener() {
  2.      @Override
  3.      public void treeCollapsed(TreeExpansionEvent event) {
  4.          // 閉じるによばれる
  5.      }
  6.      @Override
  7.      public void treeExpanded(TreeExpansionEvent event) {
  8.          // 開くときによばれる
  9.      }
  10.  });

ユーザの操作だけではなく、内部でツリーを制御するタイミングでもコールされるようなので、データを操作するときは注意しておきましょう。

Eclipseプラグイン開発:F5でリフレッシュ

Viewの更新タイミング。

暫定的に右クリックメニューに「更新」アクションを追加してたのですが、F5で更新できないの?って話になりました。

あー、そうですよねー、ってことで着手したものの結構ハマったのでメモです。
お忙しい方もいると思うので、例によって先に結果から。

  1.  IAction action = new HogeAction();
  2.  getViewSite().getActionBars().setGlobalActionHandler(
  3.          ActionFactory.REFRESH.getId(), // for Eclipse3.4
  4.          action);

ざっくりだとこんな感じ。F5だのコピーだのペーストだと言った標準的な機能に乗せるときはGlobalActionHandlerに登録しとけってことです。
plugin.xmlで指定すべきなのかも…。

ハマった理由っていうのは、最初”キーバインド”でやるのかにゃーと思い込んでいたからです。
F5 をバインドしてアクション呼び出そうとすると”!MESSAGE A conflict occurred for F5:”となり、かなりイケてないことになります。ログの”ActionHandler(RetargetAction(refresh))”などを頼りにretargetへ行き着くまでに大分時間がかかりました。疲れた!
この仕組みは”リターゲットアクション”でプラグイン開発者には通じるのでしょうか( ̄~ ̄)

Eclipseってヘルプが充実してるのですが、プラグイン開発は用語を知らないとそこまで辿りつけないのが難点ですね。こしあんだけですか。

一度横断的におさえておかないと、と思い立ったので注文しちゃいました。Eclipse本。
ちなみに新版は2009-1-2に発売だそうですよ。慌てて買う必要ありませんでしたね。高いし!とても高いし!

Eclipse: Building Commercial-quality Plug-ins2006 (Eclipse)
Eclipse: Building Commercial-quality Plug-ins2006 (Eclipse)

【参考】
Help – Eclipse SDK
Eclipse/プラグイン開発のTIPS集/再ターゲット可能なアクション – きのさいと

Eclipse RAP (Rich AJAX Platform) をいまさら知る

最近知りました。プラグインの開発とかしてるのに、存在すら知らなかったってのはどうなのでしょう。

簡単に言うと、Eclipse RCPと同程度の機能をAjaxを使ってブラウザ上で動かす仕組み、でしょうか。
使えるAPIに制限があるようですが、どの程度の制限なのか調べてみてから場合によっては使ってみたいです。

RCPがいまいち流行っていないように、RAPもあまり情報がなさそうです。
面白そうなんですけどね。

今作ってるプラグインを無理やりRAPに載せてみたら面白いかもー。

【参考】
Rich Ajax Platform
eclipse.orgが打ち出すRIAプラットフォーム「Eclipse RAP」

ホーム > Eclipse

Search
Feeds
Link
あわせて読みたいブログパーツ
Meta
AD








DMM.com 家電・日用品通販

Return to page top