きしだのはてな このページをアンテナに追加 RSSフィード

2016-11-14(月) Jackpotでリファクタリングを作成したらNetBeansが超便利に

[java][netbeans]Jackpotでリファクタリングを作成したらNetBeansが超便利に 05:55  [java][netbeans]Jackpotでリファクタリングを作成したらNetBeansが超便利にを含むブックマーク

NetBeansには、Jackpotという言語クエリーエンジンが載っているという噂がありました。でも新機能として紹介されるでもなく、なんかもしかしたら使えるのかなーという感じですっかり忘れていたところ、今回のJavaOneで紹介があって、試してみたら超便利だったので、使い方を紹介します。


Jackpotのスクリプトは、クラスパス上のMETA-INF/upgradeにhintという拡張子でファイルを作るか「検査と変換」の「単一の検査」のところの「参照」から開ける「検査の管理」で「新規」を選ぶことで作成できます。

f:id:nowokay:20161114051457p:image


ただし、「検査の管理」で作成すると埋め込まれてる

<!description="Empty Inspection">

という行の処理がうまくいってないようで、この記述を消す必要があります。

このせいで、今まで何度ためしてもうまくいってませんでした。。。


それでは、試しに「foo == null ? bar + 1 : bar」のように同じ値が2回でてくるような条件演算子を「bar + (foo == null ? 1 : 0)」のように変換するスクリプトを作ってみます。

ここでは、META-INF/upgradeにhintファイルを作ってみます。

f:id:nowokay:20161114051458p:image


内容としてはこんな感じ。

   $cond ? $a + $b : $a
=> $a + ($cond ? $b : 0)
;;

だいたいの文法はこんな感じですね。

   元の式
=> 変換後の式
;;

詳しい文法はこちら

jlahoda / jackpot30 / wiki / RulesLanguageAdditionalDocs ― Bitbucket


こういうファイルを作ると、リアルタイムにエディタ上のヒントがでてきます。

f:id:nowokay:20161114051459p:image


一括して変換する場合は、「検査と変換」で「プロジェクトのクラスパスから」というところから選べます。

f:id:nowokay:20161114051500p:image


他にも、次のようにしてLinkedListを葬り去ったりできます。

<?
import java.util.ArrayList;
import java.util.LinkedList;
?>
   new LinkedList()
=> new ArrayList()
;;
   $mod$ LinkedList $0
=> $mod$ ArrayList $0
;;
   $mod$ LinkedList $0 = $1;
=> $mod$ ArrayList $0 = $1;
;;

単純に

   java.util.LinkedList
=> java.util.ArrayList
;;

とやると、import java.util.LinkedListがimport ArrayListに変換されてちょっと雑なので、いろいろちゃんと書いています。


あとは、GuavaのList.newArrayListを葬るとか。

   com.google.common.collect.Lists.newArrayList()
=> new java.util.ArrayList<>()
;;

こういった、外部ライブラリに対応したリファクタリングは標準機能としては用意されないので、簡単なものが自分で作れるというのは便利です。

新しいライブラリの導入時とかに結構便利そうです。


プロジェクトサイト

Jackpot - NetBeans Wiki

開発者のインタビュー

Interview with Tom Ball

ライブデモ

Jackpot in NetBeans with Michael Nascimento - YouTube

トラックバック - http://d.hatena.ne.jp/nowokay/20161114