Home > Eclipse

Eclipse Archive

Eclipseのスニペットとテンプレート

前回Eclipseのスニペット(Snippet)を紹介したのですが、もろもろ紛らわしい機能でして、誤解を与えそうってことでもう少し解説します。

貴方の思う”萌え”と、わたしの思う”萌え”は別なのよ、ということですね。わかりにくい!

えっと、まずは Eclipse3.3 のJDT(Java Development Tools)を前提として、機能を説明します。

■ コード・テンプレート
EclipseでJava開発をしていると、以下のようなコードが自動生成されることがありますよね。

  1.  } catch (Exception e) {
  2.      // TODO 自動生成された catch ブロック
  3.      e.printStackTrace();
  4.  }

他にも新規にクラスファイルを作成したときなどに自動生成されるコードがあります。

ここで自動生成される雛形はユーザが設定できるようになっています。
[設定]→[Java]→[コード・スタイル]→[コード・テンプレート]

これがコード・テンプレート機能です。

■ テンプレート
Javadocの中で文字列を選択し、Ctrl+Spaceを押すとその文字列をタグで囲むことができます。
“if”と入力してCtrl+Spaceと入力したときに”else if”ブロックなどの補完ができるのもテンプレートです。

20081202a

これは[設定]→[Java]→[エディター]→[テンプレート]から変更・追加が可能です。
これがテンプレート機能です。

■ スニペット
前回こしあんが紹介したのが、これ。
コードの断片を”ビュー”から挿入することができます。

スニペットはビューです。スニペット・ビュー。大事なことなので2回い(ry

と、いうわけで以上3つの機能を紹介しました。
どれもコードの断片を貼り付ける機能で同じではないかと思われるかもしれません。まったくその通りで、ユーザにとって機能名などどうでも良いことです。それなのに、わざわざこんな紹介をしたのは、Eclipseプラグイン開発の観点からの便宜上です。

プラグイン開発の話に進む前にEclipse3.4について触れておきます。

Eclipse3.4ではスニペット・ビューが標準で付属していません。これはおそらくですが、JDTに”テンプレート・ビュー”が実装されたためと思われます。
テンプレート・ビューとスニペット・ビューはほぼ役割が同じであるため、スニペット・ビューは付属しなくなったのでしょう。

さて、やっとメイン。Eclipse3.4でスニペット・ビューと同じ機能を持つプラグインを作りたい。
方法は2つ考えられます。

  1. WST を同梱し、SnippetContributionsを拡張する
  2. AbstractTemplatesPage を実装したクラスを作成する

3.4からは2つ目の方法をとりたいところ。

■ 参考
TemplatesView - Eclipse SDK

ITemplatesPage - Eclipse SDK

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」

Home > Eclipse

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

Return to page top