Java関連の新機能

本連載では前回から数回にわたってEclipse 4.2 Junoの新機能を紹介する。今回はJava関連の新機能を取り上げる。

Eclipse Junoではルック&フィールの大幅な変更とは裏腹に、JDTの新機能は細かい使い勝手の向上に関するものが多い。JavaSEやJavaEEのバージョンアップや、昨年のIndigoリリース時のMavenサポートやGUIビルダといった目立った新機能もなく、Javaエディタやコンパイラのエラーチェックの強化がメインとなっている。

細部が強化されたJavaエディタ

Javaエディタではクイックアシスト (CTRL+1)で、拡張for文をインデックス変数を使用したforループや、Iteratorを使用したforループに変換できるようになった。特にループ処理ではインデックス変数を使用する必要があるケースは多いため、いったん拡張for文で記述したループ処理を通常のfor文に変換する場合に役立つ。

図1 : クイックアシストによる拡張for文の変換

クイックアウトラインやクイック型階層で、型検索ダイアログやコード補完時の絞り込みと同じようにキャメルケースによるマッチングが可能になった。

図2 : クイックアウトラインでの絞り込み

package-info.javaでもコード補完が効くようになっている。

図3 : package-info.javaでのコード補完

この他、気づきにくい部分ではあるが、Javadocのホバー表示でメソッドの引数に付与したアノテーションが表示されるようになっていたり、対応する括弧を強調表示する機能が改善されていたりする。

また、*.classファイルに対してソースファイルが存在しない場合に開くエディタを指定できるようになった。これはソースファイルが存在しない場合のみ逆コンパイラで生成したソースを表示する、といった用途を想定しているようだ。

コンパイラによるエラー検出機能の強化

Javaコンパイラの設定では、特定のソースフォルダのエラーや警告を無視できるようになった。たとえばツールで自動生成したソースなどの警告を無視したい場合に便利だろう。

図4 : ソースフォルダの設定

また、コンパイラによるエラー検出機能が強化されており、defaultケースが記述されていないswitch文や、enumを使用しているにも関わらずすべてのパターンが網羅されていないswitch文を検出できるようになった。クイックアシストで不足しているケースを追加することもできるので、分岐の多いswitch文を記述する際に便利だ。

図5 : 分岐の不足しているswitch文

リソースのクローズ漏れもチェックできるようになっている。ラップされたリソースやStringReaderやByteArrayOutputStreamなどクローズする必要のないリソース、フィールドとして保持しているリソースについてはクローズされていなくても警告しないなど、必要以上に厳密なチェックを行わないように調整されている。

図6 : リソースのクローズ漏れの検出

メソッドの引数にnullを許容するかどうかをアノテーションとして記述しておくと、nullを渡しているコードをコンパイラでチェックすることができるようになった。この機能はデフォルトでは無効だが、コンパイラの設定で有効にできる。また、デフォルトではJDTの@NonNullアノテーションなどを使用するが、使用するアノテーションは任意のものに変更可能だ。

まとめ

この他にもライブラリにアタッチするソースコードの文字コードが指定可能となっていたり、デバッグ時の制御を行うボタンがデバッグビューではなくEclipseのツールバーに配置されたことで操作しやすくなったりと、細かな機能改善が行われている。

今回紹介したとおり、Junoでは見た目や内部のAPIは大きく変わったものの、JDTには大きな新機能の追加はなく、細かな使い勝手の向上に留まっている。むしろ普通に使っている分院は、追加された新機能に気づかないということもあるのではないだろうか。

しかし、新たに追加されたクイックアシストやエラー検出はかゆい所に手が届くものが多く、うまく利用することでコーディングの手間やミスを減らすことができるだろう。是非これらの新機能を役立てて欲しい。