Re: IntelliJ IDEAでJavaのstatic import文に関する効率化設定をLive Templateで実現する

http://d.hatena.ne.jp/absj31/20130218/1361134157


コメントをTwitterで済まそうと思ったら、うまく伝えられなかったのでトラックバックします。static importの展開がちょっと冗長とのことですが、ちょっと設定しとくと元のエントリより1ステップほど減らせます(たった1ステップだけかよ、とか言わないw


まずは、Live Templateの設定。ほとんど変わらないのだけど、Optionsの"Use static import if possible"をチェックしとく。これで、static importにできそうな部分はstatic importに置き換えてくれる。ただ、残念な事に"Assert.assertThat()"しか変換対象になってくれない。:-(
f:id:masanobuimai:20130218222519p:plain


すぐさま試さないで、もうちょっと仕込みをしとく。ひとつは、Settings->Code Style->Java->Importsの設定。ここの"Names count to use static import with '*'"に入れた数字が、static importで "*" を使いはじめるimport文の数。以下のスクリーンショットだと、3つ同じクラスのメソッド使ったら "*" にまとめる(static importはつねに "*" で良ければ、1 とか 0 を設定する。
f:id:masanobuimai:20130218222546p:plain


個別のパッケージだけ "*" を許可したいのであれば、その下の"Packages to Use Import with '*'" にパッケージを指定する。static importで有効にしたい場合は、"Static"にチェックを入れる。さっきのスクリーンショットはつまり、こうゆうこと。

  • 普通のimport文はいかなる場合も "*" を許さない("Class count to use import with '*'"を99*1
  • static importは同じクラスを3つ使ったら "*" にまとめる("Names count to use static import with '*'"を3)
  • "org.junit.Assert"は常にstatic importで "*" にまとめる("Packages to Use Import with '*'"に "org.junit.Assert.*"を指定)

このあたりのことは,この辺も参考になるかも。→ 10日目 IDEの設定(Project Settings) - marsのメモ


これで終わりじゃ無くて、最後にもうひとつ(ふたつ?)。Settings->Editor->Auto Importで、以下の2つにチェックを入れる。

  • "Optimize imports on the fly"
  • "Add unambiguous imports on the fly"

f:id:masanobuimai:20130218222759p:plain


これで、必要/不要なimport文を即座に追加・削除してくれる。この設定、ある意味で諸刃の剣で、常に必要とするimport文のみにするので、ちょっとコメントアウトしてみただけでも、それに該当するimport文が即座に消えて無くなる。あと、人さまのコードをちょっと弄っても、import文の最適化をしちゃうので、良かったり悪かったり。:-P
先と同じく,この辺も参考になるかも。→ 11日目 IDEの設定(IDE Settings:前編) - marsのメモ


ここまで来れば準備完了。実際やってみるとこうなる。まずは、Live template展開。
f:id:masanobuimai:20130218222829p:plain

テキトウに穴埋めして展開完了。
f:id:masanobuimai:20130218222859p:plain

assertThat()はstatic import化してるけど、CoreMatchersがまだ。これはどうやら、そのままらしい。仕方ないので、CoreMatchersにカーソル寄せて、Alt+Enter(MacだったらOpt+Enter)で "Add on demand static import for 'org.hamcrest.CoreMatchers'"を選択。(´・ω・`)
f:id:masanobuimai:20130218222936p:plain

あとはごらんの通り。
f:id:masanobuimai:20130218222947p:plain


ps.
あとLive templateをコード補完の候補に紛れ込ませる設定はこちらを参照。→ IntelliJの隠しオプション一覧 - marsのメモ


ps2.
id:sioiri さんのLive Templateにするとさらにもう1ステップ減らせますね。




ちなみに、こんなやつ(ちょっぴりアレンジ。

org.junit.Assert.assertThat($actual$, $matcher$);
    $actual$  ... Expression:complete()
    $matcher$ ... Expression:classNameComplete(), Default value: "is"

だがしかし、正直テンプレートの自由度についてはEclipseのほうが上なのだ。
全Eclipse Java プログラマーに捧げる Eclispe 徹底活用術完全版〜Eclipseに空気を読ませて楽する術〜 - Yamashiro0217の日記

というか伝統的にIntelliJがイケてない(下記リンクのおまけ参照。:-P
31日間ReSharper一周 ... それIDEAでもできるよ(その7) - marsのメモ

*1:もっと多くても良い