EclipseプラグインJavaEditorへの機能追加編

EclipseプラグインのJavaEditorへの機能追加について書いていきます。

今回は次のようになっているソースを

String aaaa = null;
String b = null;
String ccc = null;

イコールの位置で整形する機能を追加してみます。

1.プロジェクト作成する。
 1)Eclipseプラグインの作り方基本編を見てこの手順でプロジェクトを作成してください。
  今回からActivatorにはちゃんとしたパッケージを指定します。
パッケージ
  今回はテンプレートは選択しません。
テンプレートは選択しない

2.plugin.xmlの編集
 1)拡張タブを選択します。
拡張タブ
 2)追加ボタンを押します。
追加ボタンを押す
 3)ポップアップメニューとして出す予定なので「org.eclipse.ui.popupMenus」を選択します。
ポップアップメニュー
 4)「org.eclipse.ui.popupMenus」の上で右クリックし以下のように選択します。
eclipse
 5)以下のように値を入力します。
  JavaEditorのIDは「#CompilationUnitEditorContext」になります。
eclipse
 6)追加したメニューの上で右クリックしactionを登録します。
  これはこのメニューを選択したときどのclassが実行されるかなどを登録します。
action
 7)追加したアクションには以下のように記述します。
  idとclassには「com.lancard.editor.action.FormatAction」
  menubarpathには「additions」と書きます。
アクション

2.クラスの作成
 1)「com.lancard.editor.action.FormatAction」を作成します。
クラスを作成
 2)コードは以下のように書きます。

package com.lancard.editor.action;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;

public class FormatAction implements IEditorActionDelegate {
private IEditorPart targetEditor = null;
public void run(IAction action) {
ITextEditor textEditor = (ITextEditor)targetEditor;
ISelectionProvider selectionProvider = textEditor.getSelectionProvider();
ISelection selection = selectionProvider.getSelection();
ITextSelection textSelection = (ITextSelection)selection;
textSelection.getStartLine();
try{
execute(textSelection.getStartLine(),textSelection.getEndLine());
}catch(BadLocationException e){
//ログとか出したほうがいい。
}
}
private void execute(int startLine,int endLine) throws BadLocationException {
ITextEditor textEditor = (ITextEditor)targetEditor;
IDocumentProvider provider = textEditor.getDocumentProvider();
IDocument document = provider.getDocument(textEditor.getEditorInput());
int maxIndex = 0;
for(int line=startLine;line<=endLine;line++){
int length = document.getLineLength(line);
int offset = document.getLineOffset(line);
String value = document.get(offset, length);
int equalsIndex = value.indexOf("=");
if(equalsIndex<0){
continue;
}
if(equalsIndex>maxIndex){
maxIndex = equalsIndex;
}
}

for(int line=startLine;line<=endLine;line++){
int length = document.getLineLength(line);
int offset = document.getLineOffset(line);
String value = document.get(offset, length);
int equalsIndex = value.indexOf("=");
if(equalsIndex<0){
continue;
}
if(equalsIndex

 3)一部見つからないクラスが出ると思います。
見つからないクラス
 4)plugin.xmlに依存関係を登録します。
  依存関係のタブを開きます。
依存関係
  以下のように2つ登録します。
登録

3.実行してみる
 1)適当にjavaファイルを作ります。
 2)エディター上で右クリックします。
 3)以下のようにメニューに機能が追加されていれば成功です。
機能

4.使ってみる
 1)整形する範囲を選択します。
使ってみる
 2)ランカードコム整形を押します。
実行後
  整形されていたら成功です。

5.プラグインファイルの作成
 1)エクスポートウィザードを実行します。
  plugin.xmlの概要タブの右下のボタンを押します。
エクスポートウィザード
 2)以下のように入力し、完了を押したら完成です。
エクスポート
 3)あとは解凍してpluginフォルダの中にあるjarファイルを自分のEclipseのpluginフォルダに入れたら
  あなただけの独自機能の追加されたEclipseを使うことが出来ます。

6.ソースの説明
 すごく簡単なソースなので、読めばわかると思うので今回はここまでです。
 あとすぐ作りたかったので適当に書いたのですが、もうちょっと奇麗にかけるところがあるかもしれないです・・。

Facebooktwitterlinkedintumblrmail

Eclipseプラグインの作り方基本編

Eclipseのプラグインの作り方基本編

1.注意

Eclipseはプラグイン開発用に新しくダウンロードしたEclipseにしたほうがいいです。

仕事で使っている色々入っているEclipseだとめんどくさいことになりがちです。

とりあえず、ここに書いてある内容がならない場合は新しく入れた方がいいです。

今回はEclipseをダウンロードして日本語化しただけのものを使います。

 

2.プラグインプロジェクトを作る
1)パッケージエクスプローラ上で右クリック→新規→その他を選択
新規からその他
2)プラグイン開発からプラグイン・プロジェクトを選択
プラグイン・プロジェクトを選択
3)プロジェクト名に「HelloWorld」と入力します。Eclipseバージョンは書いてある通りターゲットとするEclipseのバージョンになります。
今回はそのままにしておきます。
HelloWorld
4)ここは今回は変更しませんが、重要ポイントになります。
①実行環境はターゲットとなるJavaのバージョンになります。これを高くしすぎているといろんな人に使ってもらえなくなります。
 (Eclipseのバージョンもそうです。)
②リッチクライアントプリケーションを作成を「はい」にすると、Eclipse内で動くPluginと違い独立したソフトウェアになります。
プラグイン作成
5)ここは普通は何も選択する必要はないのですが、どうやって作るのかわからないときのサンプルとしてや
さっさと作りたい場合に使うといいと思います。
今回はHello,Worldを選択します。
Hello,Worldを選択
6)ここはHello,Worldのアクションクラスの設定です。ここはこのままで問題ありません。完了ボタンを押します。
そのままでOK
7)パースペクティブを変更しますか?と出てくると思いますが、「はい」でいいです。
プラグイン開発のパースペクティブのほうが便利です。
以上でプラグインは完成です。

3.実行してみる
1)赤わく部分を押します。
実行
2)もう一つEclipseが立ち上がって、メニューに「サンプルメニュー」というのがついていたら成功です。
サンプルメニュー

4.最後に説明
重要なファイルはActivator.javaとplugin.xmlとbuild.propertiesになります。
①Activator.javaはプラグインそのものを表すクラスになります。
②plugin.xmlはある意味最も重要でここに書く設定で既存プラグインに機能を追加したりしていきます。
③build.propertiesはプラグインにはライブラリーを伴うことが多いのでその設定を書いたりします。
説明

Facebooktwitterlinkedintumblrmail

PHPUnit_Storyで振舞駆動開発なテストを書いてみた

テスト対象としてEntryクラスを作成しました。

  • ステータス(下書き・公開済・削除)を持つ。
  • 初期ステータスは下書き
  • ステータスはメソッドを通じて変更できる。

まずはテスト駆動開発なテストを行う簡単なテストケースを書いてみました。こんなコードになります。

実行結果はこうなります。
$ phpunit --debug EntryTest.php 
PHPUnit 3.6.2 by Sebastian Bergmann.


Starting test 'EntryTest::testStatus'.
.

Time: 0 seconds, Memory: 5.50Mb

OK (1 test, 3 assertions)

これを振舞駆動開発なテストで書きなおしてみました。PHPUnit_Extensions_Story_TestCaseをextendsし、runGiven、runWhen、runThenを実装する必要があります。

実行結果はこうです。なんかそれっぽくなりました
$ phpunit --debug --verbose --printer PHPUnit_Extensions_Story_ResultPrinter_Text EntrySpec.php
PHPUnit 3.6.2 by Sebastian Bergmann.

EntrySpec
 [x] Status for new entry is draft

   Given New Entry 
    Then Status should be draft

 [x] Status after publish entry is published

   Given Some Entry 
    When publish Entry 
    Then Status should be published

 [x] Status after delete entry is deleted

   Given Some Entry 
    When delete Entry 
    Then Status should be deleted

Scenarios: 3, Failed: 0, Skipped: 0, Incomplete: 0.

パッと見、コード量が多くなってしまいましたが、テスト対象がサンプル程度なので。実装が増えてきたときに、runGiven、runWhen、runThenを良い感じに使いまわせるようにすると、効果大きそうです。
ちなみにPHPUnit、PHPUnit_StoryともにPEARでサクッとインストール可能です。

Facebooktwitterlinkedintumblrmail

OSC2011 Fukuoka ありがとうございました

12/3(土)に筑紫女学園大学で行われた『オープンソースカンファレンス 2011 Fukuoka』に出展して参りました。

今回、福岡ということで知った顔が多くて(福岡のコミュニティ、Rubyビジネスコモンズのスタッフをしていたり、他の勉強会やイベントにもちょくちょく参加してますので)心強かったです。
また、今年は各地のOSCに参加していますので遠方から来られた方々にも見慣れた顔が増えて参りました。

今回はセミナーも私が話させていただきました。スライドにちょっとした(まど☆マギ)ネタを入れているのですが、今回、ついに元ネタを知っている方がいないという状況が発生!

「いいかげんあきらめようか。いやしかし」

と葛藤中です(このネタのせいでスライド公開できなかったりするしなぁ。いやしかし)

そんなわたしの悲しみを表現するだれもいないブースの写真。

中央に赤くみえる梅ヶ枝餅がおしゃれポイントです。

まぁ、ブースの準備が終わったときにとった写真なのでだれもいないのは当然なんですが。
今回、現地は私一人でしたので写真がこれしかないのでした。

通常、あまり入れないような会場でいろいろとおもしろかったのですが、ライトニングトーク・閉会式の会場が礼拝堂(らいはいどう)であまりの神々しさに度肝をぬかれたのはいい思い出です。

ただ、女子大の学食を体験できなかったのは心残り(一人だったのでブースを離れるわけにもいかず昼食は梅ヶ枝餅をパクつきました)

それから、出展してるとセミナーを見れないのがつらいなぁとか、ライトニングトークネタもつくろうかなぁとか思いました。

Facebooktwitterlinkedintumblrmail

OSC2011 Tokyo/Fall セミナー無事に(?)終了しました

無事にセミナーが終了しました(会場のディスプレイへのPCの接続でトラブったようですが)。
終了時間直前に写真を撮りに行ったのですが、いい感じで質疑応答が行われておりました。

ありがとうございました。

Facebooktwitterlinkedintumblrmail

OSC2011 Tokyo/Fall 二日目開始

しております。峰松が14時からセミナーやるのできてね♪

出展していると他所のセミナーを見に行けないのが悲しい。
おもしろそうなのがてんこ盛りなのになー。

というわけで(?)昨日は懇親会がありました。
会場で可愛かったのでパチリ。

Facebooktwitterlinkedintumblrmail

OSC2011 Tokyo/Fall はじまりました

今回、土日の二日間(11/19〜20)です。展示 A(405)にブースをだしております。

明日は弊社のセミナーもあります。よろしくおねがいします。
28号館404教室「OSC. Government OSSと政府・自治体」のトラックです。

https://www.ospn.jp/osc2011-fall/modules/eguide/event.php?eid=41

ブースの準備が終わったらおもむろにコードを書き始めた人を激写。

Firefoxのぬいぐるみがかわいすぎる。でかすぎる。勝てね〜

とか言ってたらコード書いてた人が「うちのにゃんこ達を連れてくるしかない!」
と言いながらネコ画像を表示しはじめました。にゃんこ写真みたい方もどうぞ。

Facebooktwitterlinkedintumblrmail

HomebrewでApache2.2+MySQL5.1+PHP5.3環境を構築

残念ながらHomebrewのリポジトリにはApache、PHPがなく、MySQLは5.5となっています。もっともApacheとPHPに関しては、システムに入ってるものはインストールしないというHomebrewの方針なんだろうと思いますが。で探し回っているとこんなものを見つけました。

Alternate formulae repos for Homebrew
https://github.com/adamv/homebrew-alt/

homebrewのリポジトリにはないものを野良的に公開してくださっています。上記利用させていただいて、MAMP環境を構築します。

PHP5.3のインストール

HomebrewはFomulaの直URL指定でもインストールすることができます。

brew install https://raw.github.com/adamv/homebrew-alt/master/duplicates/php.rb --with-mysql

ちなみにduplicatesディレクトリに入っているFomulaは、OS Xに標準で入っているものが集められています。

MySQL5.1のインストール

brew install https://raw.github.com/adamv/homebrew-alt/master/versions/mysql51.rb --with-utf8-default --use-gcc
初期設定
unset TMPDIR
mysql_install_db
起動・停止

私は、自動起動はさせたくなかったので、launchdには登録しませんでした。

mysql.server start
mysql.server stop

Apache2.2のインストール

brew install https://raw.github.com/adamv/homebrew-alt/master/duplicates/httpd.rb

httpd.conf等は/usr/local/Cellar/httpd/2.2.21/etc/apache2にあります。

PHPなどの設定

私の場合は、extra/php.confを作成し、httpd.confにてIncludeするようにしています。

vi /usr/local/Cellar/httpd/2.2.21/etc/apache2/extra/php.conf
LoadModule php5_module /usr/local/Cellar/php/5.3.8/libexec/apache2/libphp5.so
AddType application/x-httpd-php .php .php5 .phtml

その他に、DocumentRootを/Users/dataich/Sitesという風にユーザーホームのSitesディレクトリを使用するようにしました。この辺りはお好みで。

起動・停止
sudo apachectl start
sudo apachectl stop

あとは、phpinfo()で出力してみたりして確認すればOKです。

追記 – 2011/11/08
Homebrewで入れたPHPのpearでpermissionエラーが出ましたので、下記でもろもろ設定しました。

chmod -R ug+w /usr/local/Cellar/php/5.3.8/lib/php
pear config-set php_ini /usr/local/etc/php.ini
Facebooktwitterlinkedintumblrmail

CEATEC JAPAN 2011 完走しました

10/8(土)に無事に終了いたしました。ありがとうございました。

技術者向けのイベントというわけでもありませんし、OpenCOBOLを使用してのダウンサイジングという相当にコアな内容の展示ですので多くの方に興味をもっていただくというわけにはいきませんでしたが深い興味をもった方々に来ていただきました。うれしかったです。

午前にご説明さしあげた方から午後にジュースを差し入れていただいてホッコリしたりも。

夜は疲れて「唐辛子だばー」したりもしたけどボクは元気です(どうでもいい)。

ちゃんと食べましたよ。カプサイシン!カプサイシン!

参加させていただいた長崎県ブースの展示、最終的にはこんな感じになりました。

特にご注目いただきたいのが左端の弊社のディスプレイの下の電光掲示板(ちょっと見えにくいですが)。
木曜日から応援に来てもらったスタッフのお手製です!(キット使用)

今後も各地で展示やセミナー等を行なっていく予定です。よろしくお願いいたします。

Facebooktwitterlinkedintumblrmail

CEATEC JAPAN 2011 ブース準備完了

富士通さん、NECさんの向かいという恐ろしいロケーションにビビりつつも準備完了。

大手さんのリハーサル、まじハンパネェっす。

まわりハデっす。長崎県ブース地味っす。逆に目立つかも?

Facebooktwitterlinkedintumblrmail