データフローを分析する
大きなコードベースで作業する場合、データの処理方法とワークフローを改善してコードのパフォーマンスと可読性を向上させる方法を理解することが難しい場合があります。これを容易にするために、IntelliJ IDEA データフロー分析では、プログラムを実行せずに、考えられるすべてのデータ変換を追跡できます。この情報は、アプリのデザインを改善し、バグが現れる前にバグを診断するために使用できます。
データフロー分析は、次の情報を提供します。
メソッドまたは式の下流のデータに何が起こるか: コンシューマーとは何か、生成される可能性のある値は何か。
メソッドが持つことができるすべての可能な入力値と、特定の値の取得元。
変数が
null
になる可能性があるかどうか。この情報を使用すると、予期しない NullPointerException を防止し、冗長な null チェックと@Nullable
アノテーションを削除してワークフローを最適化できます。
分析結果を表示する
分析するデータを表す識別子にキャレットを置きます。宣言、ステートメント、メソッドのパラメーターなどでシンボルを分析することを選択できます。
メインメニューから、
を選択して上流(生産者)のデータを分析するか、 を選択して下流(消費者)のデータを分析します。分析の範囲を指定します。テストを除外する場合は、テストソースを含めるチェックボックスをオフにします。
また、特定の値または式の結果に関心がある場合は、それをフィルターフィールドで指定して、関連する結果のみを表示できます(ここまでのデータフローで使用可能)。
フィルターの例
null/null 以外の値
null
!null
文字列
"Hello"
列挙型
SPRING
SUMMER
FALL
WINTER
boolean
true
false
int/long
0
>0
<=100
!=9
分析の結果を含むツールウィンドウが開きます。それらはノードに編成され、それぞれがデータフローステップを表します。
![Dfa の結果 Dfa results](https://resources.jetbrains.com/help/img/idea/2023.2/dfa_results.png)
例では:
getComplete()
メソッドは、complete
変数の値を返します。complete
変数には、初期化中にnull
を割り当てるか、setComplete
メソッドで任意の値を取得できます。setComplete()
メソッドは行 17 および 48 で呼び出され、値false
およびtrue
をそれぞれ割り当てます。
結果をリフレッシュ
コードが変更され、同じ式を再度分析する場合は、分析ツールウィンドウでリフレッシュをクリックします。
可能な値を分析する
ここまでのデータフローを表示する場合、ノードを値でグループ化して、可能な値の概要を取得したり、ノードの起源を分析したりできます。
特定の値に関する情報を取得するには、分析ツールウィンドウの左側にあるリーフ式でグループ化をクリックします。
null/null 以外の値に関する情報を取得するには、分析ツールウィンドウの左側にあるリーフ式の nullness によるグループ化をクリックします。
ファイルにエクスポート
分析の結果をテキスト形式で共有する場合は、エクスポートオプションを使用します。
エクスポートする分析タブを選択します。
分析ツールウィンドウの左側にあるテキストファイルにエクスポート
をクリックします。
結果をクリップボードにコピーする場合は、コピーをクリックします。結果をファイルにエクスポートするには、ファイルにエクスポートフィールドでファイルを選択し、保存をクリックします。
スタックトレースの分析
プログラムが例外でクラッシュした場合、スタックトレースをデータフロー分析の入力として使用できます。これは、不適切な値の原因を追跡できます。
上記のコードは固定サイズの配列を作成し、そこからランダムな要素にアクセスしようとします。インデックスが配列の長さより大きい場合があるため、ArrayOutOfBoundsException
がスローされることがあります。
スタックトレースで、例外をスローしたフレームのソース参照をクリックします。
エディターがソースの対応する行に移動します。
ポップアップをクリックして、例外の原因となった値のソースを見つけます。
ここまでのデータフローが開き、フィルターが適用されます。
関連ページ:
![](https://pleiades.io/icons/idea.png)
外部スタックトレースを分析する
たとえば、QA エンジニアなどの他の人が受け取った例外を分析したり、デッドロックやハングアップの問題を調査することができます。デバッグモードまたは単体テストの実行時に発生する例外とは異なり、これらの例外には、ソースコード内の対応する場所に移動するのに役立つリンクはありません。さらに、ソースコードをスクランブルすることができます。IntelliJ IDEA を使用すると、例外またはフルスレッドダンプをコピーして Stack Trace Analyzer に貼り付け、情報を調べて対応するソースコード...
![](https://resources.jetbrains.com/help/img/idea/2023.2/vcs_operations_quick_list.png)
バージョン管理
VCS 操作のポップアップ () またはを使用して、VCS 関連のコマンドをすばやく呼び出します。ポップアップ内のアクションのリストは、現在有効になっている VCS によって異なります。次のショートカットを使用して、グローバルバージョン管理コマンドを呼び出すこともできます。VCS 操作のポップアップ ... コミット ... プロジェクトの更新ロールバックプッシュ ... 次の変更前の変更バージョン管理ウィンドウを表示するコミットウィンドウを表示データフローを...