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

Eclipse 4.3 "Kepler"の新機能一覧



http://eclipse.org/kepler/



[改版履歴]

  • 2013-07-01 画像のリンク切れを修正
  • 2013-07-01 リリース版で追加された機能の解説を追加


はいどうも。毎年恒例のリリースがやって参りました。
(去年の分はこれ)


今日はまだリリース前日なので、まとまった解説ページが無いようです。
そこで、
http://eclipse.org/downloads/packages/eclipse-standard-43-rc3/keplerrc3
から各マイルストーンビルドを辿り、新機能の解説を寄せ集めました。
(※ 2013-07-01時点で、いくつかのページがリンク切れになっています)


以下、マイルストーンビルドの時系列順に解説します。
Eclipse本体及びJDTが対象です。その他(PDE等)はお察し下さい。


実は、僕はEmacs+の呪縛から逃れられないので未だに3.7を使っているのですが、
(特に、[Ctrl-x 2]系が使えないと辛い)
まあそろそろ諦めて乗り換えるタイミングかもしれませんね…

M1ビルドで追加された機能


http://archive.eclipse.org/eclipse/downloads/drops4/S-4.3M1-201208101300/news/


New 'Convert if-else to switch' quick assist (if-else文をswitch文に変換するクイックアシスト)

if-else文をswitch文に変換するクイックアシストを追加しました。
逆に、switch文をif-else文に変換するクイックアシストもあります。

Force Eclipse to compile (illegal) ambiguous varargs code (曖昧ないし不正な可変長引数のコードを無理やりコンパイルする)

JDK6以前のコンパイラには、以下のように宣言された可変長引数のコードがコンパイルできてしまうというバグがありました。

このバグはJDK7では解消しており、『曖昧な呼び出しである』というコンパイルエラーになります。
Eclipse Junoにおいても、これに準拠した仕様となっています。



しかし、JDK6以前がターゲットプラットフォームな方にとってはこの仕様は困るということで、
システムプロパティ"tolerateIllegalAmbiguousVarargsInvocation"を指定することで、強制的にコンパイルできるようにしました。

...
-vmargs
-DtolerateIllegalAmbiguousVarargsInvocation=true
...


注意:この設定をONにする代償として、JDK7およびEclipseの標準設定ではコンパイルできる以下の様なコードがコンパイルエラーになります。


New batch compiler options (ecjコマンドラインコンパイラのオプションを追加)

以前はEclipseの設定画面のみで指定できたオプションを、ecjコマンドラインコンパイラの引数でも指定できるようにしました。

  • Javadocに関する設定
    • invalidJavadoc: set all warnings for malformed Javadoc tags
      • Javadocタグに関する全ての検証をON
    • invalidJavadocTag: validate Javadoc tag arguments
      • Javadocタグの不正な引数を検知
    • invalidJavadocTagDep: validate deprecated references in Javadoc tag args
      • @deprecatedタグの不正な引数を検知
    • invalidJavadocTagNotVisible: validate non-visible references in Javadoc tag args
      • Javadocタグ引数の不正な参照を検知
    • invalidJavadocVisibility(): specify visibility modifier for malformed Javadoc tag warnings
      • Javadocタグの検証対象となるメンバーの可視性を指定
    • missingJavadocTags: enable detection of missing Javadoc tags
      • 欠けているJavadocタグを検知
    • missingJavadocTagsOverriding: detect missing Javadoc tags in overriding methods
      • オーバーライドされたメソッドで、欠けているJavadocタグを検知
    • missingJavadocTagsMethod: detect missing Javadoc tags for method type parameter
      • メソッドの型引数で@paramが欠けていることを検知
    • missingJavadocTagsVisibility(): specify visibility modifier for missing Javadoc tags warnings
      • 欠けているJavadocタグの検知対象となる可視性を指定
    • missingJavadocComments: detect missing Javadoc comments
      • Javadocコメントが欠けている箇所を検知
    • missingJavadocCommentsOverriding: detect missing Javadoc tags in overriding methods
      • オーバーライドされたメソッドで、Javadocコメントが欠けている箇所を検知
    • missingJavadocCommentsVisibility(): specify visibility modifier for missing Javadoc comments warnings
      • オーバーライドされたメソッドで、Javadocコメントが欠けている箇所を検知する対象となる可視性
  • nullアノテーション(@NotNull等)に関する設定
    • nullAnnotConflict: detect conflict between null annotation specified and nullness inferred. Is effective only with nullAnnot option enabled
    • nullAnnotRedundant: detect redundant specification of null annotation. Is effective only with nullAnnot option enabled
    • nullUncheckedConversion: detect unchecked conversion from non-annotated type to @NonNull type. Is effective only with nullAnnot option enabled
      • null可能性が未知な値を@NotNullとして宣言している箇所をを検知。nullアノテーションが有効になっている場合のみ機能
  • 不要な引数に関する設定
    • unusedParam: detect unused parameter
      • 不要な引数を検知
    • unusedParamOverriding: detect unused parameter for overriding method
      • オーバーライドされたメソッドで、不要な引数を検知
    • unusedParamImplementing: detect unused parameter for implementing method
      • インタフェースを実装しているメソッドで、不要な引数を検知
    • unusedParamIncludeDoc: detect unused parameter documented in comment tag
      • コメントで宣言されている引数のうち不要なものを検知
    • unusedThrownWhenOverriding: detect unused declared thrown exception in overriding method
      • オーバーライドされたメソッドにおける、不要なthrow宣言を検知
    • unusedThrownIncludeDocComment: detect unused declared thrown exception, documented in a comment tag
      • コメントで宣言された@throwまたは@exception宣言のうち不要なものを検知
    • unusedThrownExemptExceptionThrowable: detect unused declared thrown exception, exempt Exception and Throwable
      • コメントで宣言された@throwまたは@exception宣言のうち、暗黙的に宣言不要である(訳注:おそらくRuntimeExceptionやErrorのこと)が宣言されているものを検知
New API to indicate content assist requested on the start of a constructor (コンテンツアシストで、コンストラクタ呼び出しの開始位置にプレースホルダーを置く)

org.eclipse.jdt.core.CompletionContext.TL_CONSTRUCTOR_STARTという定数が以下の位置を表すらしいです。
おそらくプラグイン開発者向け。

/**
 * The completed token is the first token of a constructor
 * invocation expression.
 * e.g.
 * 
 * public class X {
 *   public void bar() {
 *     new Foo| // completion occurs at |
 *   }
 * }
 */

M2ビルドで追加された機能


http://archive.eclipse.org/eclipse/downloads/drops4/S-4.3M2-201209201300/news/


Detached windows with sash (サッシでウィンドウのデタッチ)

これまでは、デタッチされたウィンドウには機能制限があったのですが、その制限がなくなったそうです。

Trim dragging (調節されたドラッグ)

ツールバーをドラッグで動かせるようになりました。


パースペクティブスイッチャーもドラッグできるようになり、ウィンドウの右か左にドラッグすると垂直に配置されます。


Import nested projects (ネストしたプロジェクトのインポート)

プロジェクトのソースツリー内に含まれるネストしたプロジェクトもインポート対象として検索できるようになりました。


Content assist shows Javadoc in Display, Expressions and Variables view (デバッガのコンテンツアシストでもJavadocを表示)

むしろ、今まで無かったということに気が付きませんでした。



M3ビルドで追加された機能


http://archive.eclipse.org/eclipse/downloads/drops4/S-4.3M3-201210312000/news/


Option to omit -XStartOnFirstThread (起動設定で、-XStartOnFirstThreadオプションを省略できるように)

OSXでSWTのプログラムを起動する場合に、-XStartOnFirstThreadオプションの有無を指定できるようになりました。


Global preference to include exported entries during launching (起動設定で、エクスポートされたクラスパスエントリのみを含むか否かを指定できるように)

以下の画像参照。(手抜き)

グローバルな設定なので、起動設定の移行は不要とのことです。


Launch configuration dialog can show warnings (起動設定のダイアログで警告を表示できるように)

これまではOKかエラーの2択だったのが、警告も表示できるようになったそうです。


Javadoc view resolves enclosing method call and keeps last target (まだ書いている途中のコードが呼び出しているメソッドのJavadocを表示できるように)

Javadocビューと宣言ビューで、まだ書いている途中のコードが呼び出すメソッドのJavadocを表示できるようになったそうです。


Detection of unused type parameters (不要な型引数を検知する)

実際には使われていないクラスの型引数を検知できるようになりました。

デフォルトではOFFになっているので、コンパイラ設定でONにして下さい。


Option to omit @Override for interface methods (インタフェースの実装メソッドでは@Overrideアノテーションの補完をOFFに)

Eclipseには元々、@Overrideを補完する機能が備わっています。
これを、インタフェースの実装メソッドではOFFにできるようになりました。


M4ビルドで追加された機能


http://archive.eclipse.org/eclipse/downloads/drops4/S-4.3M4-201212140730/news/


Performance enhancements (パフォーマンス向上)

体感できるくらいにパフォーマンスが向上したそうです。特に、エディタを開いたり編集したり閉じたりするのが遅かった箇所での向上が顕著だとか。
メモリリークもかなり修正。


(Photographer: YtseJam Photography / Creative Commons Attribution 2.0)


SWT for GTK3

だそうです。(手抜き)


Paste direct to a new stacktrace console (スタックトレースコンソールに直接貼り付け)

これまでは、スタックトレースコンソールに何かを貼り付ける場合はダイアログでいちいち指定しなければならなかったのが、
それが不要になったそうです。


XML DOM logical structures (XML DOMの論理的な構造)

DOMをデバッガで扱う際、プレーンなJavaオブジェクトではなく、XMLの構造に従ったオブジェクトツリー表示という特別扱いになるそうです。
ま、いまどきDOMを直接扱うコードを書くことなんてめったにないとは思いますが。



Quick assist to combine Strings (文字列を連結するクイックアシスト)

文字列を連結するクイックアシストが追加されました。


Option to inherit null annotations (nullアノテーションの継承)

Eclipse独自機能であるnullアノテーションですが、以下の画像にある通り、宣言を継承するかどうか指定できるようになりました。
nullアノテーションを使ったり使わなかったりと混在しているコードの移行を支援するために追加したそうです。


これまでは、nullアノテーションが宣言されたメソッドをオーバーライドしている箇所では、nullアノテーションの宣言が必須でした。


Eclipse 4.3では、コンパイラの設定でこの振る舞いを変更できます。


この結果、以下の通りnullアノテーションが継承できるようになっています。


Leak analysis respects well-known utilities (著名なユーティリティを使う場合のリソースリーク解析を改善)

GoogleApache由来のライブラリがリソースリーク解析の考慮に含まれるようになりました。

例えば、IOUtils#closeQuietlyのようなメソッドは明らかにクローズを行なっているので、
Closeable#closeを明示的に呼ばなくてもクローズされているものと判定するようになりました。
これにより、例えば以下の画像のような警告が抑制されるようになっています。


ただし『著名なユーティリティ』のホワイトリストは、現状ではハードコーディングされており、ユーザーによる指定はできません。


M5ビルドで追加された機能


http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M5a-201302041400/news/


Null annotations for fields (フィールドに対するnullアノテーション)

Eclipse Indigoでリリースされたnull解析ですが、とうとうフィールドにも適用可能となりました。


フィールドが@Nullableであると宣言されるとき、全てのフィールドアクセスは暗黙的にnullポインター参照であると通知されます。
ただし完全に検知できるわけではなく、参照の別名が存在していたり並列処理などのケースではnullポインター参照の可能性が依然として残ります。


安全性と利便性のバランスを考慮した結果、『フィールドへの構文的null解析』を使えるようにしました。
このオプションをONにすると、コンパイラは限定的な範囲のコードに対して、以下の解析を試みます。

  • フィールドへの直接のアクセス
  • @NotNullとして宣言されたフィールドへの代入


例えば以下のコードでは、12行目で確認が行わているので13行目のアクセスは安全であると解釈します。
しかし、17行目ではエラーになります。15行目の時点でnullableはnon-nullであることは明らかですが、
16行目のbarの呼び出しによって安全性が損なわれる可能性がある(訳注: barの呼び出しの副作用によりnullableがnullになる可能性があるから)と解釈されるからです。


Support for package Javadoc in Javadoc hover and view (パッケージJavadocのホバー表示)

package-info.javaまたはpackage.htmlの内容をホバーで表示できるようになりました。


Quick Assist for unused type parameters (不要なパラメータを除去するクイックアシスト)

不要なパラメータを除去するクイックアシストが使えるようになりました。


Pre-filling package name in creation wizards (パッケージ作成におけるパッケージ名補完)

パッケージ作成を伴う全てのウィザードは、パッケージ名のデフォルトが指定済みとなりました。


デフォルトで選択されるパッケージ名は、もしまだ何のパッケージも宣言されていないならばプロジェクト名です。
もしソースツリーが唯一のパッケージを含む場合、それがデフォルトになります。


M6ビルドで追加された機能


http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M6-201303141330/news/


Migration Wizard (移行ウィザード)

移行ウィザードが追加されました。プラグインの再インストールを支援します。
Eclipse自体の更新が行われたか、初回起動時に移行ウィザードが起動します。


Whole word option on File Search page (ファイル検索における単語一致)

ファイル検索で単語一致が使えるようになったようです。


Open Search dialog on last used page (最後に開いた検索ダイアログタブを記憶)

最後に開いた検索ダイアログのタブを記憶しておけるようになりました。


'Convert to if-!-return' Quick Assist (ガード節のクイックアシスト)

長いif文などでは、条件が一致しなければさっさとreturnして終わり、という書き方のほうが可読性が高いことがあります。
これをいわゆる"ガード節"と呼びますが、クイックアシストでガード節を抽出できるようになりました。


Package names are linked in Javadoc hover and view (Javadocホバーで、パッケージ名をクリック可能に)

Javadocを表示するホバー内でパッケージ名をクリックできるようになりました。


Javadoc and Declaration view indicate when out of sync (Javadocビューの同期状態を表示)

Javadocビューの内容が、現在の選択要素とリンクしているか否かを表示するようになりました。


Only one Junit 4.11 (JUnitのバージョンを4.11に統一)

表題通り。


Improved evaluation of generics while debugging (デバッグ中の総称型の検知を改善)

総称型の解釈に失敗しているために、コンパイルエラーになる評価式の扱いを改善したそうです。


API to contribute location information for non-standard JRE / JDK libraries (非標準JRE/JDKライブラリのソース位置情報API)

たぶんプラグイン開発者向け。


リリースビルドで追加された機能

http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2FwhatsNew%2Fjdt_whatsnew.html&cp=1_6
http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FwhatsNew%2Fplatform_whatsnew.html

Open Resource dialog enhancements (『リソースを開く』ダイアログの機能追加)

『リソースを開く』ダイアログで、ファイルを開くときにパースペクティブまたはエディタを選択できるようになりました。


Installation Remedation (インストールの修復)

プラグインの依存関係エラーなどを修復するウィザードが追加されました。


Stop thread from OSGi console (OSGiコンソール経由でのスレッド停止)

バグのあるプラグインが無限ループなどで応答しなくなった時、これまではEclipseのプロセスごとKillしないとダメでした。
これからは、-consoleというオプション付きでEclipseを起動することでOSGiコンソールが起動します。ここから、

osgi> threads stop main

と入力することで、mainスレッドで直ちにIllegalStateExceptionを発生させることができます。
これで大抵は無限ループを抜けることができるはず。


なお、OSGiコンソールを閉じてしまっても、

telnet localhost:12345

OSGiコンソールをいつでも使用可能です。


Quick Fix to create 'for' loop variables (拡張for文で型名を補完)

拡張for文を型名なしで記述しても(この時点ではまだコンパイルエラー)、補完できるようになりました。


Template and keyword proposals without prefix (接頭語なしでのテンプレート/キーワード補完)

最初の文字を打ち込まなくてもテンプレートおよびキーワード補完ができるようになりました。


Remove type arguments after content assist (コンテンツアシスト後に型引数を削除)

コンテンツアシストで総称型を入力後、それが不要な場合に'<'を削除すれば、対応する'>'までを一発で削除してくれるようになりました。


Content assist appends ';' to void methods (戻り値がvoidなメソッド呼び出しの後に自動でセミコロンを追加)

コンテンツアシストで、戻り値がvoidなメソッドを保管した場合、自動でセミコロンが付くようになりました。


Use ';' key to insert method invocation

コンテンツアシストにおいて、メソッド戻り値の型に関係無く、セミコロンキーをメソッド呼び出し候補の確定に使えるようになりました。
メソッド呼び出しコードを保管後、末尾にセミコロンが付きます。


JUnit test templates (JUnitテストのテンプレート名を変更)


JUnit4が標準になったので、テンプレート名が単に'test'になりました。


JUnit view shows assumption failures (@Ignoreされたテストへの専用アイコン)

これまで、@Ignoreされたテストはテストをパスしたものとして表示されていましたが、これからは『スキップされた』アイコン付きで表示されるようになりました。