しおしお

IntelliJ IDEAのことなんかを書いてます

IntelliJのGenerateメニューで生成されるアクセッサにJavadocも出力するように

IntelliJ14.1から、Generateメニューで生成するアクセッサのフォーマットがカスタマイズできるようになりました。
これで、旧バージョンでは出来なかったJavadocのカスタマイズなんかもできるようになるので、テンプレートの編集手順まとめてみました。

アクセッサを生成するためのGenerateメニューを開く

こんな感じに選択候補が出てくるので、どれか選びましょう
f:id:sioiri:20150219130048p:plain

生成されるコードのテンプレートを選択する

14.1からは、こんな感じにテンプレートを選択できるようになっています。
デフォルトだと、GetterはIntelliJ DefaultのみでSetterはIntelliJ DefaultとBuilderが選べます。が、これらのテンプレートはJavadocは生成してくれないので、おれおれテンプレートを作ってあげます。
f:id:sioiri:20150219130246p:plain

テンプレートの追加画面を開く

下の画像の手順でテンプレート編集画面を開きます。新規でテンプレート作るの無理なので、IntelliJ Defaultを選択してコピーしてあげましょう。
f:id:sioiri:20150219130536p:plain

テンプレートにJavadocを追加

画像の枠線の中のように好みのJavadocコメントを追加してあげます。フィールド名は、$field.nameで取ってこれます。($fieldが持ってるプロパティは、Ctrl + Spaceでリスト表示されます。)
f:id:sioiri:20150219130848p:plain

生成されたコード

テンプレート通りに生成してくれました。

    /**
     * get test.
     *
     * @return test
     */
    public String getTest() {
        return test;
    }

IntelliJでクラスのヘッダーコメントをプロジェクトごとカスタマイズしよう

@さんの下のツィートを見て、そういえば
IntelliJ IDEA 14.1 EAP is Available! | JetBrains IntelliJ IDEA Blogにファイルテンプレートをプロジェクトで持てるみたいなこと書いてあったなと思って調べてみた。

IntelliJ IDEA14.1のFile Templateの設定画面に行くと、右上にSchemaなるリストボックスが増えてる!!
これを、Projectにしてあげてテンプレートいじると、その設定はプロジェクトのみに有効となります!なのでauthorをプロジェクトごと変えるとか割りと簡単にできる!!

この画像で、選んでるFile HeaderがClassのJavadocになる部分です。
f:id:sioiri:20150210224505p:plain

14.0系の設定画面だと、下の画像のように右上のリストボックスがない!!残念な感じです。
f:id:sioiri:20150210223741p:plain

ちなみに、Generate -> Getter(Setter)の生成ちと変わってて、生成するものをメニューで選択すると、下のようなメニューが出るようになってた。
f:id:sioiri:20150210224312p:plain

アクセッサのテンプレート編集方法はこちら→
http://siosio.hatenablog.com/entry/2015/02/19/131405


おわり。

IntelliJ IDEA14でのコード補完を整理してみた

コード補完の設定(IntelliJ IDEA12版)へのアクセス未だにあるので、バージョン14でのコード補完どうなってるか整理してまとめてみた。

コード補完の設定画面

バージョン14から設定画面ガッツリ変わったので、Code Completionの設定する場所にたどり着くの毎回苦労する感あります。
f:id:sioiri:20150127225910p:plain

設定内容

Case sensitive completion
候補を絞り込むときの条件(どの程度厳密にするか)を選択する。

選択肢 内容
All 大文字小文字完全一致で候補が出るようになる。
f:id:sioiri:20150127234406p:plain
None 大文字小文字を区別せずに候補が出るようになる。
f:id:sioiri:20150127235341p:plain
First letter 最初の文字のみ大文字小文字を区別して候補を出します。
f:id:sioiri:20150127235556p:plain

私は、Shift押すのとか面倒なのでNoneを選択してる感じです。(一時期、変数とクラス名区別してくて、First letterを選択してたけど、わたしにはあまりあわなかった)

Auto-insert when only one choice on
候補が単一だった場合の振る舞いを選択する。チェックをONにすると選択候補が一つだけだった場合に、リストを表示せずに候補を確定状態にします。
これは、チェックONにしといたほうが良いですね。

Sort lookup items lexicographically
候補リストの表示順を設定します。チェックをONにすると辞書順に表示されます。

チェックON、OFFでの違いはこんな感じになります。これはどっちでもいいような気がします。(私は、チェックOFFにしてますが)

チェックをONにした場合
f:id:sioiri:20150128232201p:plain
チェックをOFFにした場合
f:id:sioiri:20150128232205p:plain

Autopopup code completion
自動で候補をリスト表示するかどうかを選択する。これは超絶便利なのでチェックしてあげるべきです。

Insert selected variant by typing dot, space, etc.
候補選択時に、ドットやスペースをタイプした場合にその候補を確定させるかどうかを選択する。

これは、超絶便利じゃないか!と思った時もあったけど、めっちゃストレス溜まるからチェックは外してます。私が使いこなせなかっただけかもだけど、お前じゃないんだよって候補が選択されることがあったので耐えられなくなりましたね。

Autopopup documentation
ドキュメント(Javadoc)を自動で表示するかを選択する。チェックした場合には、どれ位経過後に表示するかをミリ秒で入力する。
私は、見たくなった時に表示できればいいのでチェックはしていません。

Autopopup in
パラメータ情報を自動で表示するかどうかを選択する。チェックした場合には、どれ位経過後に表示するかをミリ秒で入力する。
私は、見たくなった時に表示できればいいのでチェックはしていません。

Show full signatures
パラメータ情報でどこまで表示するかを選択する。チェックすると、メソッド名や戻り値も表示されるようになる。私は長くなると見づらくなるのでチェックはしていないです。

IntelliJ IDEA12に頃のコード補完の設定画面は、こんな感じでした13からauto popupさせる時間の設定がなくなったりしてだいぶスッキリした感じがあります。
f:id:sioiri:20150127234535p:plain

いろいろなコード補完を使ってみよう

Basic Completion
最もよく使われる補完タイプだと思います。デフォルトだと、Ctrl + SpaceがBasicな補完タイプです。あとは、AutopopupなやつもBasicタイプだと思います。

こんな感じに、超絶曖昧な情報でもいい感じに候補を表示してくれてかなり頭いいかんじです。
f:id:sioiri:20150129222457p:plain
キャメルケースの各ワードの先頭文字で候補絞ってくたりもする。
f:id:sioiri:20150129222808p:plain

Basic Completionで候補表示時にもう一度Ctrl + Spaceで、その昔存在していたClass Name Completionぽい絞りこみが行われる。例えば、依存関係で参照可能なクラス名やstaticなフィールドやメソッドが候補として表示される。

Smart completion
そのスコープないで適切なもの(変数に代入可能なものやキャストで利用可能なクラスのみなど)のみを候補表示してくれる。デフォルトだと、Ctrl + Shift + SpaceがSmartな補完タイプです。
Basicと比べるとかなり頭良い感じです。

こんな感じに、Basicタイプで表示された候補がSmartタイプに切り替わることでかなり絞りこまれています。
f:id:sioiri:20150129225143g:plain

SmartタイプもBasicと同じように、2回モードが有りかなり賢い候補の表示がされます。
下の動画のように、最初のSmartタイプでは候補がないと言われるけど、さらにSmart補完を行うことでコンテキスト内で利用可能な変数やメソッドが持っているメソッドなどまでたどって候補を表示してくれます。
これめっちゃ便利なやつです。
f:id:sioiri:20150129225733g:plain

Smart2回タイプでは、配列→List変換の候補表示もしてくれたりする。
f:id:sioiri:20150129230407g:plain

Postfix Completion
変数名やメソッド名の後に.(ドット)とキーワードを入力することで、対応するテンプレートを展開してコード補完してくれるやつです。
例えばnullチェックの分岐テンプレートは、nullキワードで展開できます。
f:id:sioiri:20150129230959g:plain
利用可能なテンプレート一覧は、SettingsのEditor -> General -> Postfix Completionから確認できます。
割りと大量にあります。
f:id:sioiri:20150129231129p:plain

Words Completion
ファイル内の単語を補完してくれる。これは、コメント内や文字リテラル内のやつも候補に出してくれる。デフォルトだとAlt + Slashで利用できる。
この補完は、候補をリスト表示してくれるのではなく、Alt + Slashをのたびに次のワードを表示してくれる。

検索窓のワード補完
ファイルない検索の窓でCtrl + Spaceをしてあげるとそのファイル内のワードを候補で表示してくれる。ほとんど使ってないので便利さよくわかってない。
f:id:sioiri:20150129231716p:plain

まだまだ、いろいろありそうな気がするけど長くなったのでこのへんで終わりにする。

IntelliJでGradleプロジェクトを新規作成した時に出力されるbuild.gradleの内容を変更する

IntelliJでGradleプロジェクトを新規で作った場合、build.gradleが以下の内容で出力される。(Use default gradle wrapperを選んだ場合はwrapperタスクは出力されていないと思います。)

この内容だと、ソースコードの準拠レベルが1.5だったりjunitのバージョンが1つ古かったり(このブログを書いてる時点で)と残念なところがあるので好みの形にテンプレートを変更してあげるのがいいと思います。

apply plugin: 'java'

sourceCompatibility = 1.5
version = '1.0'

task wrapper(type: Wrapper) {
  gradleVersion = '1.9'
  distributionUrl = 'http://services.gradle.org/distributions/gradle-1.9-all.zip'
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

テンプレートの変更方法

File and Code Templatesからテンプレートを変更できます。Gradleのテンプレートは2種類用意されていますが、プロジェクト作成時に「Use default gradle wrapper」を選択した場合には「Gradle Build Script」が使用されます。「Use customizable gradle wrapper」を選択した場合には「Gradle Build Script with Wrapper」が使用されます。
f:id:sioiri:20150121232835p:plain

こんな感じに自分用にテンプレートを変更してあげます。
f:id:sioiri:20150121233717p:plain

プロジェクトを新規で作ると、こんな感じにテンプレート通りにbuild.gradle作ってくれます。

apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

task wrapper(type: Wrapper) {
  gradleVersion = '2.1'
  distributionUrl = 'http://services.gradle.org/distributions/gradle-2.1-all.zip'
}

repositories {
  mavenCentral()
}

dependencies {
  testCompile 'junit:junit:4.12'
}

これで、毎回生成されたテンプレート修正するとかしなくて良くなる感じです。

おわり。

IntelliJのデバッグ実行でSpringBootのホットデプロイできちゃう感

SpringBoot+Gradleでホットデプロイを使えるようにを書いたところ、@さんから下の反応もらえた!

※SpringBoot系のエントリあげると、いつもアドバイスもらえるのでほんとにありがたい!

ということで、さっそくIntelliJ IDEAからデバッグ実行して試してみた!

デバッグ実行は、おなじみの[Run]->[Debug]からですね。デバッグ実行中にコード変更してコンパイルすると新しいクラス再ロードする?的なこと聞いてくるのでYes押しちゃいましょう!
f:id:sioiri:20150116235850p:plain

もし、ダイアログが表示されない&クラスリロードされない!場合には、設定でリロードしたくないって選択されているので修正しましょう。
設定箇所は、下の画像(IntelliJ IDEA14の設定画面の場合)を見てください。該当箇所がNeverになってるとダメなので変更してあげます。私はAsk派です。
f:id:sioiri:20150117000722p:plain

あとは、ブラウザでリロードしてあげましょう。いい感じに最新化されているはずです。

@さんもTwitterのリプライで書いてくれていますが、メタ情報を変更した場合はデバッグ実行でのリロードは効いてくれません。個人的には、デバッグ実行だと出来る範囲が限定されるので、前のエントリであげたspringloaded使っといたほうがいいかなと思ったりしてます。

おわり。

SpringBoot+Gradleでホットデプロイを使えるように

GradleなSpringBootプロジェクトでホットデプロイを有効にする手順(IntelliJ IDEA大好きっ子なので、IntelliJ IDEAベースでの手順になってます。)

Spring Boot Reference Guideによると、springloadedなるものを使ってあげるだけで、わりと簡単にホットデプロイが使えるようになるらしいので、適用方法まとめてみた。

build.gradleでbuildscriptの依存にspringloadedとspring-bootを追加

build.gradleのサンプル。spring-bootは、apply pluginを忘れずに。

buildscript {
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE")
    classpath 'org.springframework:springloaded:1.2.1.RELEASE'
  }
}

// spring-bootプラグイン
apply plugin: 'spring-boot'

Thymeleafのキャッシュをoffに

アプリケーションのresources配下のapplication.propertiesに以下を追加する。
これで、テンプレートのキャッシュが無効化されるので、テンプレートが変更された場合再度読み込んでくれる。

spring.thymeleaf.cache=false

IntelliJ IDEAのGradle tasksをリフレッシュ

Gradle tasksウィンドウを開いてタスク一覧を最新化する。下の画像の枠内のくるくるアイコンをクリックで最新化できます。
f:id:sioiri:20150113232350p:plain

アプリケーションの実行

GradleのbootRunタスクを実行してアプリケーションを実行します。最新化されたタスク一覧上にbootRunタスクがあるので、ダブルクリックで実行できます。
f:id:sioiri:20150113232531p:plain

ホットデプロイを試す

bootRunで起動中にJavaコードを編集→コンパイル後にブラウザをリロードすると最新のコードが実行されます。
ちとわかりづらいけど、ホットデプロイが有効になってることがわかります。(Kotlinだからなのかコンパイルが遅い(´・ω・`))
f:id:sioiri:20150114230457g:plain


おわり。

IntelliJさんのpsvmで生成されるmainメソッドを可変長引数に変更してみよう

IntelliJさんのpsvmで生成されるmainメソッドの定義を変更する方法です。

デフォルトの設定だとString配列を受け取るmainメソッドが生成されます。

生成されるコードのイメージはこんな感じですね。

public static void main(String[] args) {

}

どうやら、String配列で受け取るよりJava5からの可変長引数で受け取るほうが若者感があるようなので、Live Templateを変更してStringの可変長引数のコードが生成されるようにしてみましょう。

手順1

設定画面の「Editor」 -> 「Live Templates」へ移動します。

※バージョン13以前の場合は、設定画面の「IDE Settings」の中に「Live Templates」があります。

手順2

テンプレート一覧の中からpsvmを選択します。
psvmはotherの中にあります。

手順3

下の画像のようにテンプレートをちょこっといじってあげます。

f:id:sioiri:20150108085246p:plain


これで終わりです。

psvmでこんな感じのコードが生成されるようになっているはずです!

public static void main(String... args) {

}

おわり。