Edited at

Visual Studio IntelliCodeがJavaに対応したので試してみた

Visual Studio Codeの拡張機能「Visual Studio IntelliCode」がJavaに対応したとのことで、早速試してみました。

12/2追記

Visual Studio CodeでなぜJava開発が可能か?について調べました。

「なぜVisual Studio CodeでJavaの開発ができるのか?」


Visual Studio IntelliCodeとは?

機械学習を用いてAIがコーディング支援してくれる機能で、GitHubにあるコードを学習データとして使っているそうです。


環境

試したのは次の環境です。拡張機能にJava Extension Packのみ入れた環境を用意して確認しました。Language Support for Java™ by Red Hatは既にJava 11に対応しているため、今回はOpenJDK 11.0.1を利用しました。


  • Windows 10 Pro(Azure上のVM)

  • Visual Studio Code 1.29.1

  • OpenJDK 11.0.1

  • Java Extension Pack


    • Language Support for Java™ by Red Hat

    • Debugger for Java

    • Java Test Runner

    • Maven Project Explorer



  • Visual Studio IntelliCode


結果


Hello World

まずはHello Worldの標準出力レベルで確認してみます。


Visual Studio IntelliCodeがない環境

Visual Studio IntelliCodeを入れる前の環境を試します。System.outでドットを打つとメソッド一覧が表示されますが、普通にアルファベット順に表示されています。

2018-11-17_23h06_52.png


Visual Studio IntelliCodeを入れた環境

続いてVisual Studio IntelliCodeを入れた環境で試してみると、「★」マークが付いたものが表示されます。これがIntelliCodeによって推奨されたメソッドです。appendを指しているよりは嬉しいですね。

2018-11-17_23h07_55.png


コンテキスト

先の例はシンプルすぎてあまり良さがわからないので、次のような例を試してみました。


Integer型の数値

Integerの数値を定義して、メソッドをみると、次のように並びます。

2018-11-18_00h37_17.png


Integer型の数値 + if文

if文の条件で使ってみると先ほどparseIntやtoStringが並んでいたものが、equals、intValueなどが優先されました。このようにコードのコンテキストに合わせてAIが推奨してくれるようです。

2018-11-18_00h48_14.png

現状どこまで有効な表示がでるかわかりませんが、ちゃんと機能しているようです。


おまけ

ちなみにJDK11で入ったHttpClientを試してみると、「★」が付いたものは表示されませんでした。この辺はまだ学習データがないのか、JDK11に対応していないのか、よくわかりませんでした。

2018-11-17_23h23_50.png


[追記]

当初、以下の例で書いていました。

Integer val = new Integer(123);

コメントいただいたとおり、deprecatedでVSCodeでも警告が出ていました。悪い例を書いてしまい、失礼しましたm(_ _)m

2018-11-18_00h29_30.png