この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

Eclipse 3.7 "Indigo" の新機能一覧


(Eclipse4.2 "Juno"の新機能一覧はこちら)
http://d.hatena.ne.jp/takahashikzn/20120629/1340961428


Eclipse 3.7 "Indigo"がリリースされました。
Eclipse 3.6 "Helios"がリリースされてからちょうど1年ですね。


Mergedocの3.7対応版もリリースされています。さすが仕事が早い!
http://d.hatena.ne.jp/cypher256/20110623/p1


ついでにEclipseLink-2.3.0もリリースされているようです。
http://www.eclipse.org/eclipselink/releases/2.3.0.php
コチラについては後日レポートを。

新機能は?

さて、今回の新機能を見ていきましょう。このページを翻訳しました。
http://download.eclipse.org/eclipse/downloads/drops/R-3.7-201106131736/eclipse-news-part2.html


いつも通りですが超意訳してますので、
間違っている箇所があったら教えてくださいませ。

JDK7サポートについて

JDK7が正式リリースされていない以上、Indigoの正式リリースにJDK7サポート機能を含めるわけには行かない、というスタンスのようです。
それでもJDk7を使いたい方はコチラが参考になるでしょう。
http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29


(2011-09-28追記: Eclipse3.7.1でJDK7サポートが追加されたようです)

Javaエディターの新機能

Open Java element from clipboard

以下のようなテキストがクリップボードに存在する場合、該当するソースファイルを開けるようです。

  • java.lang.String
  • String
  • String#getBytes
  • String.getBytes
  • java.lang.String.getBytes(String)
  • String.java:123
  • at java.lang.String.matches(String.java:1550)
  • java.lang.String.valueOf(char) line: 1456
  • currentTimeMillis()
Hyperlinks

Ctrlを押しながら書く要素へマウスカーソルを合わせたときに表示される各種ハイパーリンク
Indigoでは、以下の3つのリンク機能が追加されました。

"Introduce new local with cast type" quick assist

instanceofのifステートメントの中で、

if (obj instanceof String) {
	String s = (String) obj;
}

のように、"String s = (String) obj"をアシストできるようになりました。


"Join variable declaration" quick assist for variables initialized to null

nullで初期化する変数宣言について、『変数宣言を結合する』クイックアシストが追加されました。

(訳注:どういう機能なのかわかりませんでした…)


"Exchange Operands" quick assist for comparison operators

例えば、

a >= b

のような式を

b <= a

のように、比較演算子の向きを変えるクイックアシストが追加されました。
個人的に、これはちょっとウレシイかも。

New 'Put expression in parentheses' quick assist

指定した式を明示的に括弧で囲むクイックアシストが追加されました。

a > 0

へ適用すれば

(a > 0)

になるし、

a > b && b > 0

へ適用すれば

(a > 0) && (b > 0)

になります。


'Add missing case statements' quick assist

Enumを使ったswich文のとき、一部のEnum値のcase文しか書いていないときに
残りのEnum値のcase文を補完できます。


Semantic coloring for abstract classes

抽象クラスと通常のクラスで、構文ハイライト設定を別に設定できるようになりました。


Quick Outline shows inherited members for nested type

クイックアウトラインで、継承されたメンバーも一緒に表示できるようになりました。


Ctrl+drag to add to Call Hierarchy

Ctrlを押しながらメソッドをドラッグしたとき、呼び出し階層のメンバーへドロップできるようになりました。


Navigate to {@inheritDoc} target

{@inheritDoc}からのハイパーリンクで、inheritDocで継承されたJavadoc宣言(要するに親クラスのメソッドのJavadoc)
へとジャンプできるようになりました。

Navigate to 'break' and 'continue' target

(for文などの中で)continue文、break文、ラベルへとジャンプできるようになりました。


Format Java elements via Outline view

アウトラインビューから要素を選択して、コードフォーマットができるようになりました。


Disable smart indentation on 'Enter'

エンターキーを押したときにスマートインデントしない(→必ずキャリッジリターンする)ように設定できます。

Javaコードフォーマッターの新機能

New line after annotations

アノテーションについての詳細な改行フォーマット設定が追加されています。


Preserve whitespace before line comment
System.out.println("aaa"); // aaaを表示
System.out.println(1);     // 1を表示

こんな風に、コードの行末コメントを桁揃えしてくれるっぽいです。
コレはなかなかナイスな機能かも。


Javaコンパイラの新機能

New option to include 'assert' in null analysis

ECJコンパイラの『潜在的なヌルポインターアクセス』の精度が上がったようです。
assert文でのnullチェックも正当なnullチェックとして考慮されるようになりました。

従って、この機能をONにすると

assert obj != null;
if (obj == null) {
    ...
}

というステートメントでは、"if (obj == null)"の箇所で
『冗長なnullチェック』であると怒られてしまうようです。


元々この機能はデフォルトでONになっており、明示的にOFFに出来なかったのが
設定項目化しただけのようです。


Missing Javadoc tags for method type parameters no longer reported by default

メソッドにGenerics宣言が付いているとき、Javadocで型パラメータを宣言しなくても
警告が出ないようにできます。

これまでは、

/**
 * @param <T> ...
 * @param <U> ...
 * @param <M> ...
 * @param obj ...
 */
public <T,U,M> void foo(Object obj) { ... }

と書かなければならなかったのが、

/**
 * @param obj ...
 */
public <T,U,M> void foo(Object obj) { ... }

だけで済むようになります。


Improved detection of unused local variables, parameters and fields

使っていないローカル変数の検知精度が向上したようです。

for (int var = 42; ; var++) {
    var -= 17;

    // 以下、varを使っていない任意のコード
}

というコードで、varが実質的に使われていないことを検知できるようになりました。


Filter preferences on Java > Compiler > Errors/Warnings page

コンパイラの警告・エラー表示をフィルターできるようになりました。


Unavoidable generic type problems

どうしようもないケースでのジェネリクス系警告を抑制できるようになりました。

@Override
public void set(List arg) { // rawタイプの警告(1)
    super.set(arg);
    arg.set(0, "A");        // rawタイプの警告(2)
}

例えばこのようなケースの場合、メソッドをオーバーライドしているので
オーバーライドしているメソッド自身のシグネチャを変更できないのであれば、
rawタイプを使うことは避けられないわけです。

これまでは@SuppressWarningsを使って頑張るしかなかったわけですが、これからは楽になります。スバラシイ。


Compiler detects methods that can be static

スタティックにできるメソッドを検知できるようになりました。


On-disk JRE change detection

JREEclipseの外で更新された場合でも、自動的に検知できるようになりました。(Eclipseの再起動は必要)


New "javadoc" token for @SuppressWarnings annotation

Javadocにまつわる警告へも@SuppressWarningsが使えるようになりました。
(例えば、クラスパス上にないクラスを@seeで参照している時など)

ビューやダイアログに関する新機能

Open Type Hierarchy on multiple type containers

『型の階層を開く』を使える場所が増えました。
パッケージやソースフォルダ、プロジェクトなどを複数選択して、
それらに中に含まれる全ての型階層を一発で表示できるようです。


Configure 'Search In...' in Call Hierarchy

呼び出し階層ビュー内で検索できるようになりました。

(訳注:呼び出し階層のフィルタを掛けられるようになるという意味じゃないかと。。。)

History for breakpoint conditions

デバッガの条件付きブレークポイントで、条件式の評価結果の履歴を見ることが出来るようになりました。

Prompt before deleting conditional breakpoints

条件付きブレークポイントを削除する際、確認ダイアログを表示するようになりました。

Step filtering for bean-style getters and setters

デバッガで『ステップイン/ステップおーばー/ステップリターン』ボタンにフィルタを掛けられるようになりました。
つまり、例えばJDKのクラスなど、ステップインしても無意味なコードを飛ばしてステップインできるようになったということです。
これはかなり役に立ちそう。


プロパティファイルエディタの新機能

New "Escape backslashes" and "Unescape backslashes" quick assists in properties file editor

バックスラッシュのエスケープ/エスケープ解除がクイックアシストで出来るようになりました。

Auto-escaped characters and editor hovers

native2ascii後のプロパティファイル(ユニコードエスケープ後のファイル)で、文字列にカーソルを当てるとホバーで元々の文字列を表示できるようになりました。

JUnit関連の新機能

New JUnit Test Suite wizard supports JUnit 4

JUnit4をサポートしたテストスイート(要するに、@SuiteClassesを使ったテストスート)をウィザードで作成可能です。

Show latest JUnit test in all windows

デフォルト設定では、JUnitテストケースを実行した結果は
テストケースを起動したビューからしか検知されません。
(最新のJUnit実行結果が他のJUnitビューに反映されない)

Paste URL into JUnit view

指定したURLからJUnitテスト結果をダウンロードしてきて表示できるようになりました。
(コレ、どういうシチュエーションで使うんだろう?イマイチわからない…)