31日間ReSharper一周 ... それIDEAでもできるよ(その9)

Day 22:Alt+Insでコード生成(http://matarillo.com/resharper/day22.php

やっとこ,ALT+Ins(ert)か。IDEAもコード生成メニューは,ALT+Insにより発動するが,ReSharperのそれとは,少々毛色が違うようだ(見た目は似てるんだけどね)。


まずは,コンテキスト依存なのは同じなんだけど,コンテキストによるグレーアウトはしない。以下の3つのスクリーンショットは,それぞれJavaエディタ,HTMLエディタ,XMLエディタ上でALT+Insを押したときの結果だ。


これが,Javaエディタんとき。


これが,HTMLエディタんとき。'Constructor'を選んだからと言って,どうなるでもない。


でもってこれが,XMLエディタ。編集しているXMLはSpringの設定ファイルで,Selena EAPを使っているから,ちゃっかりメニューには,Springに関する項目が表示してある。:-D
#Springサポートってビッグニュースなんだろうけど,使ってないのでありがたみが沸かない。:-(


こんな具合。カーソルがどこにあろうと,エディタ中だったら間違いなくあのメニューが表示される。スペック的にはReSharperのほうが優秀っぽいんだが,今んこと,これで困ったことは無いから別にいいや。


あーそうそう,ReSharperでは触れてなかったけど,ALT+Insはプロジェクトウィンドウでも発動するデスヨ。このメニューを使うことで初めて新規ファイル(クラス)の作成ができるワケ。


これもコンテキスト依存で,ソースディレクトリ以外だと,こんな感じになる。


IDEAでクラス作ろうと思ったら,ALT+Enterによるインテンションリファクタリングのほうが頻度高いんだけど,何もないところでクラス作るにはALT+Insで作るしかない。で,このALT+Insによるクラスの生成なんだが,非常にシンプル。


(↑)こんなダイアログがポコッと出るだけで,クラス名を入力したら,そんで終わり。ALT+Insキーを押したパッケージ直下に新しいクラスができあがる。あとは,継承するなり実装するなり好きにしろと。


実を言うと,IDEAのこのシンプルさがすげー気に入ってるのだ。なんてかね,「どこに作れだとか,何を継承しろだとか,いちいち聞かないから,好きにしろ」っていう,放っぽり出され加減が心地良いというか。
これに慣れちゃうと,他のIDEのクラス作成ダイアログは,なんか見ただけでお腹いっぱいになる。
#クラスくらい,サクっと作らしてくれと...


あんまりいい話じゃないが,このシンプルさはJava EEにまで貫かれている。あまり目立たないので,気がつきづらいのだが,プロジェクトウィンドウの'Java EEビュー'でALT+Insキーを押すと,一応サーブレットサーブレットフィルタがメニューに登場する。


で,おそるおそるサーブレットあたりを選ぶと,やっぱりこんなダイアログが表示されるだけだ。


IDEAの名誉のために言っておくが,ちゃんとweb.xmlと連動してservletタグはだけは打ってくれる。servlet-mappingやらはあとで設定してねってことになるんだが,IDEAのweb.xml設定ダイアログはNetBeansみたく,web.xmlすべての要素をサポートしてくれないので,直接web.xmlを編集したほうが手っ取り早かったりするのだ。


最悪...といっちゃあ身もフタもないが,カスタムタグに関してはTLDとの連携なんて気の利いたことはしてくれない。なんでま,TLDのリファレンスと首っ引きでコーディングすることになるが,カスタムタグ作る機会もそうはないので,ガマンしてる。
この点に関しては,NetBeansは親切だね。カスタムタグのJavaコードがちょっと気ぃ利かし過ぎなのが玉に瑕だけど。


それと,これは憶測なんだけど,多分EJB2.xだったら,もちっとマシにメタファイル(ejb-jar.xml)と連携してくれてんだと思う(それっぽいことがヘルプに載ってるし)。ただ,EJB2.xなんて頼まれても作る気になれないし,IDEAのEJB2.x機能もほとんど使ったことがないので,よく知らない。なんで憶測。
#そう思うと,EJB2.xサポートって実に余分な機能だよなぁ。:-(


話が大きくずれたんで,そろそろReShaperと同じ話題に戻すとしよう。といっても,そんなに書くことはないんだけどね。


ReSharperで言うところの「コンストラクタの生成(Constructor)*1」「プロパティの生成(Getter/Setter/Getter and Setter)」「インターフェイスメンバの実装(Implement Methods...)」「継承メンバのオーバライド(Override Methods...)」「委譲用メンバの生成(Delegate Methods...)」と「EqualsとGetHashCodeの生成(equals() and hashCode())」の解説はそのままIDEAにも適用できる。唯一の違いと言えば,IDEAはウィザードじゃないってことくらい。


IDEAのポリシーなんだと思うんだが,IDEAではなかなかウィザードが登場しない(というか,ほとんどお目にかからない)。唯一のウィザードはプロジェクト作成時のくらいで,あとはほとんどダイアログだ。たとえば,「コンストラクタの生成(Constructor)」は,こんなダイアログが表示されるだけだ。


...なーんて言ってたら,「EqualsとGetHashCodeの生成(equals() and hashCode())」は違った。これは,ReSharperと同じようなウィザードが登場する。
うーん,普段,equals()やhashCode()を実装してないのがバレバレだな。:-D


ps.
プロジェクトウィンドウで表示される新規ファイル群は,ファイルテンプレート(Settings→File Templates)で好きなテンプレを追加できる。エディタ上で表示される生成コード群は,ユーザカスタマイズできないけど,幾つかプラグインが出てる。オススメなのは,この2つかな。

あたしには合わなかったけど,人によってはIDEA Docも便利なのかも知れない。

*1:かっこ内はIDEAのメニュー項目名