分1234はじめに今回は地味ながらもあなどれない分析機能――「Analyze」メニューについて紹介します。「⁠Analyze」メニューは図1のようなコマンドで構成されています。Nullity..."まではインスペクション系の機能で,それ以降が分析系の機能になっています。インスペクション系の機能について紹介します。fly(その場で指摘)系のもので,インテンションと異なり解決策の提案はほとんど行いません。そのためもあって,ともすれば小うるさいだけの機能に受け取られがちです。Code..."を実行すると「Inspectionツールウィンドウ」にインスペクション結果が出力されます。Path")やリファクタリング・プレビューの「Findツールウィンドウ」に若干似ています。Code..."の実行例(クリックすると動きがわかります)「Inspectionツールウィンドウ」は左側のペインに,インスペクションで該当した箇所がカテゴリ別に分類されてリストアップされます。分類はツールバーで多少カスタマイズすることができます(詳しくは後述します⁠)⁠。右側のペインには,左側で選択した対象の詳細(該当ファイル名やインスペクションに該当した理由など)が表示されます。quickfix」です。このアイコンをクリックすると,インスペクションに引っかかった対象に然るべき解決策を適用します。紹介した方法と異なります。resolution」と同じものです。quickfix」は左側ペインの選択箇所に応じて,広範囲に解決策を適用できます。参考までに「Inspectionツールウィンドウ」のツールバーの機能を表1に示します(⁠「⁠Findツールウィンドウ」のツールバーと同じ機能のものは省略しています⁠)⁠。インスペクション結果をHTMLかXMLにエクスポートします。Results..."で再表示できます。インスペクション結果を重要度別に分類します。インスペクション結果をディレクトリ別に分類します。解決済みの対象を除外(フィルタリング)します。Inspection」で再度インスペクションを実行したときに前回との違いを表示します(字の色が変わる⁠)⁠。再度インスペクションを実行したときに,前回と変わらない結果を隠します。only」の振る舞いはイマイチ納得できていません。該当するインスペクションの設定画面を開きます。インスペクションに対応する解決策を適用します。特定のコマンド名はありません。該当するインスペクション項目の有効/無効を設定します。クリックするとポップアップが表示されます。Code..."以外にあと3つあるインスペクション系メニューについて紹介します。Name...特定のインスペクション項目を名前を指定して実行します。Everwhere"のようなポップアップウィンドウから実行したいインスペクション名を指定するのですが,正直なところインスペクションを個別に覚えていられないので,ほとんど使った事はありません。インスペクションのセット(プロファイル)を作らず実行できるので,年に数回程度役に立つときがあります。Analysis...現在エディタで開いているファイルのインスペクションのレベルを設定します。Hectorおじさん」をクリックしたのと同じです。mode」だけ全体に対して有効です⁠)⁠。その設定はリアルタイムインスペクションにだけ有効です。Name..."の評価対象になります。Export」を実行し,XML形式で保存しておいたインスペクション結果を再表示します。Studioを終了すると消えてしまいます。そのため,このオフラインブラウズは意外と重宝します。Nullity..."とはなに?もともとIntelliJに提供されているnull推論機能です。JSR305に似た独自のアノテーションを用いて,変数やパラメタなどにnullを許可する/しないというマークを付けることができます。Studioで,この機能の恩恵を受けるのは小細工が必要なので,この機能自体を忘れてしまっても,そう困る事はありません。Nullity..."を実行するとソースコードを解析して,変数やパラメタがnullを許可するのかしないのかを推測して,許可するのであれば@NotNullを許可しないのであれば@Nullableを設定します。Studioが提供しているannotations.jarに含まれています。Nullity..."を実行すると図9のようにannotations.jarをプロジェクトに設定する方法を問い合わせてきます。Studioでは一筋縄にはいきません。事を知らないので,ビルドすると大量のエラーが表示されます。解決策としては,annotations.jarをプロジェクトに内包させ,build.gradleにリスト1のように記述することです。files('lib/annotations.jar')}ただ,特定のIDE固有のアノテーションにまみれさせてまでする価値のある機能か?というと正直疑問が残ります。Studioのプラグイン開発でならば,そのIDE固有アノテーションを使うことにも抵抗はないのですが,それ以外の開発で利用するとなると抵抗があります。ちなみに,これらのアノテーションはRetentionPolicy.CLASSです。インスペクション著者プロフィール今井勝信(いまいまさのぶ)システムエンジニア。