データフローを分析する
大きなコードベースで作業する場合、データの処理方法とワークフローを改善してコードのパフォーマンスと可読性を向上させる方法を理解することが難しい場合があります。 これを容易にするために、IntelliJ IDEA データフロー分析では、プログラムを実行せずに、考えられるすべてのデータ変換を追跡できます。 この情報は、アプリのデザインを改善し、バグが現れる前にバグを診断するために使用できます。
データフロー分析は、次の情報を提供します。
メソッドまたは式の下流のデータに何が起こるか: コンシューマーとは何か、生成される可能性のある値は何か。
メソッドが持つことができるすべての可能な入力値と、特定の値の取得元。
変数が
nullになる可能性があるかどうか。 この情報を使用すると、予期しない NullPointerException を防止し、冗長な null チェックと@Nullableアノテーションを削除してワークフローを最適化できます。
分析結果を表示する
分析するデータを表す識別子にキャレットを置きます。 宣言、ステートメント、メソッドのパラメーターなどでシンボルを分析することを選択できます。

メインメニューで、 に移動してアップストリーム (プロデューサー) のデータを分析するか、 に移動してダウンストリーム (コンシューマー) のデータを分析します。
分析の範囲を指定します。 テストを除外する場合は、 テストソースを含める チェックボックスをオフにします。
また、特定の値または式の結果に関心がある場合は、それを フィルター フィールドで指定して、関連する結果のみを表示できます(ここまでのデータフロー で使用可能)。
フィルターの例
null/null 以外の値
null!nullString
"Hello"enum
SPRINGSUMMERFALLWINTERboolean
truefalseint/long
0>0<=100!=9
分析の結果を含むツールウィンドウが開きます。 それらはノードに編成され、それぞれがデータフローステップを表します。

例では:
getComplete()メソッドは、complete変数の値を返します。complete変数には、初期化中にnullを割り当てるか、setCompleteメソッドで任意の値を取得できます。setComplete()メソッドは行 17 および 48 で呼び出され、値falseおよびtrueをそれぞれ割り当てます。
結果をリフレッシュ
コードが変更され、同じ式を再度分析する場合は、 分析 ツールウィンドウで 更新 をクリックします。
可能な値を分析する
ここまでのデータフロー を表示する場合、ノードを値でグループ化して、可能な値の概要を取得したり、ノードの起源を分析したりできます。
特定の値に関する情報を取得するには、 分析 ツールウィンドウの左側にある リーフ式でグループ化 をクリックします。
null/null 以外の値に関する情報を取得するには、 分析 ツールウィンドウの左側にある リーフ式の nullness によるグループ化 をクリックします。
ファイルにエクスポート
分析の結果をテキスト形式で共有する場合は、 エクスポート オプションを使用します。
エクスポートする分析タブを選択します。
分析 ツールウィンドウの左側にある テキストファイルにエクスポート
をクリックします。
結果をクリップボードにコピーする場合は、 コピー をクリックします。 結果をファイルにエクスポートするには、 ファイルにエクスポート フィールドでファイルを選択し、 保存する をクリックします。
スタックトレースの分析
プログラムが例外でクラッシュした場合、スタックトレースをデータフロー分析の入力として使用できます。 これは、不適切な値の原因を追跡できます。
上記のコードは固定サイズの配列を作成し、そこからランダムな要素にアクセスしようとします。 インデックスが配列の長さより大きい場合があるため、 ArrayOutOfBoundsException がスローされることがあります。
スタックトレースで、例外をスローしたフレームのソース参照をクリックします。

エディターがソースの対応する行に移動します。
ポップアップをクリックして、例外の原因となった値のソースを見つけます。

ここまでのデータフロー が開き、フィルターが適用されます。