IntelliJ IDEA 2020.3 ヘルプ

重複を分析する

IntelliJ IDEA は、重複したコードフラグメント インスペクションを使用して、特定のファイルセット内の反復的なコードブロックを見つけるのに役立ちます。コードを作成または貼り付けて複製を作成すると、IntelliJ IDEA はそれをすぐにハイライトして、迅速な修正を提案します。

インスペクションにはいくつかの設定が搭載されており、動作を変更することができます。

選択したファイルセットのすべての重複を一度に表示するには、名前でインスペクションを実行します。

Detecting duplicates on-fly

インスペクションを構成する

  1. 設定 / 環境設定ダイアログ Ctrl+Alt+S で、エディター | インスペクションに移動します。

  2. 必要なインスペクションプロファイルプロファイルリストで選択されていることを確認します。

  3. インスペクションダイアログの検索フィールドに duplicated code fragment と入力して、リストからインスペクションを見つけます。

    インスペクションをクリックすると、その設定が右側に表示されます。

    • 重大度 : リストから重大度レベルを選択するか、新しい レベル作成します

    • スコープ : インスペクションが動作するファイルのスコープ(インスペクションが実行されるコード)を選択します。

    • 重複の表示 : 複製が表示されるファイルのセットを選択します。

      誤検知の結果を避けるために、同じモジュールまたは同じファイルからの重複のみを表示するように分析を制限することができます。

    • 次よりも単純な重複をスキップ : 選択したファイルセットの残りのコードと比較されるコードフラグメントのサイズを単位で設定します。

      デフォルト値は正確さと見つかった重複の量の間の妥協点です。値を大きくすると、より正確な結果が得られます。より多くの重複を見つけるには、値を減らしてください。

      単位の正確な値は次のように計算することができます。units = 2 * number of statements + number of expressions

    • このインスペクションが動作する予定の言語を選択してください。

  4. 変更を適用し、ダイアログを閉じます。

Configuring the inspection

構成要素を匿名化する

ファイルタイプごとに匿名化する構成要素を構成できます。つまり、異なる名前または値を使用する 2 つの同一のエンティティを重複として扱うかどうかを定義できます。

  1. インスペクション説明のリンクをクリックするか、設定 / 環境設定ダイアログ Ctrl+Alt+S を開いてエディター | 重複に進みます。

  2. 分析を適用するファイルの種類を選択し、匿名化する構成要素の横にあるチェックボックスをオンにします。

  3. 変更を適用し、ダイアログを閉じます。

ダイアログでは、分析とインデックス作成から言語を完全に除外することもできます。このページで言語を無効にすると、この言語はインスペクション設定で非表示になります。

Anonymize constructs

インスペクションの抑止

インスペクションを抑止すると、コード分析エンジンは、特定のコード(クラス、メソッド、フィールド、またはステートメント)でこのインスペクションによって検出された問題をハイライトしません。

  1. インスペクションを抑制したいコード要素にキャレットを置き、Alt+Enter を押します。

  2. 同様の重複をすべて表示アクションの横にある矢印 Icons general arrow right をクリックし、必要な抑制アクションを選択します。

    Suppressing the inspection

詳細は、インスペクションの抑止を参照してください。

インスペクションを無効にする

インスペクションを無効にすると、オフになります。つまり、コード分析エンジンは、このインスペクションが検出するように設計されている問題について、プロジェクトファイルの検索を停止します。

  1. インスペクションを無効にするコード要素にキャレットを置き、Alt+Enter を押します。

  2. 同様の重複をすべて表示アクションの横にある矢印 Icons general arrow right をクリックし、インスペクションを無効にするを選択します。

    Disabling the inspection

インスペクションを再度有効にするには、設定 / 環境設定 | エディター | インスペクションに移動し、重複したコードフラグメントの横にあるチェックボックスを選択します。

詳細は、インスペクションを無効にするを参照してください。

重複を手動で検索する (非推奨)

  1. メインメニューから解析 | 重複コードの検索を選択します。

  2. コード重複分析スコープの指定ダイアログで、分析範囲(プロジェクト全体、現在のファイル、コミットされていないファイル(バージョン管理下のプロジェクト用))、またはカスタム範囲を指定します。さらに、テストソースを分析に含めることもできます。

  3. コード重複解析設定ダイアログで、分析したい言語を選択します。

    言語ごとに、オプションをチェックして分析設定を定義します。例: コードフラグメントが重複していると見なされるように同一の一致を要求するか、コード構成要素が重複していると見なされないような一定の制限を指定することができます(たとえば、ソースコードで各 if 構成要素を報告しないように)

  4. 重複ツールウィンドウで、解析結果を調べましょう。

    Duplicates tool window

関連ページ:

コードインスペクション

IntelliJ IDEA には、コンパイル前にプロジェクト内の異常コードを検出して修正する一連のコードインスペクションがあります。IDE はさまざまな問題を見つけてハイライトし、デッドコードを見つけ、可能性のあるバグを見つけ、スペルの問題、コード構造全体を改善することができます。インスペクションは、すべてのプロジェクトファイル内のコード、または特定のスコープ内のみ(たとえば、本番コード内、または変更されたファイル内)のコードをスキャンできます。すべてのインスペクションには、問題がコードに影響を...

インスペクションを実行

IntelliJ IDEA は、エディターで開かれているファイル内のコードを分析し、入力時に問題のあるコードをハイライトします。さらに、選択したファイルのスコープで必要なインスペクションまたは一連のインスペクションを手動で実行できます。この場合、ファイルで検出されたすべての問題の包括的なレポートが表示されます。現在のファイルの即時分析:IDE はコードを継続的に分析し、問題を検索します。エディターの右上隅のウィジェットには、現在のファイルで検出された各重大度の問題の数が表示されます。ウィジェッ...

プロファイルのカスタマイズ

インスペクションプロファイルは、有効なインスペクション、それらが分析するファイルの範囲、およびそれらの重大度設定に関する情報を保持します。IntelliJ IDEA には、2 種類のプロファイルがあります。プロファイル IDE に保管は、IntelliJ IDEA 構成ディレクトリの inspection フォルダーに保存され、すべてのプロジェクトで使用できます。プロジェクトにコピーオプションを使用して、IDE プロファイルを現在のプロジェクトにコピーできます。プロファイルプロジェクトに保管は、.ide...

インスペクションの重大度の構成

インスペクションの重大度は、検出されたコードの問題がプロジェクトにどれほど深刻な影響を及ぼすかを示します。すべての重要度レベルには、独自のハイライトスタイルがあります。IntelliJ IDEA には、事前定義された重大度レベルのセットがあります。エラー: 構文エラーをマークします。警告: バグを生成したり、機能拡張を必要とする可能性のあるコードフラグメントをマークします。弱い警告: 改善または最適化できるコードフラグメントをマークします(冗長コード、重複したコードフラグメントなど)。サーバーの...

インスペクションの無効化と有効化

いくつかのインスペクションは現在見たくない問題を報告するかもしれません。この場合、無効にしたり抑制したりできます。インスペクションを使用不可にすると、無効になります。これは、このインスペクションが検出するように設計されているという問題について、コード分析エンジンがプロジェクトファイルの検索を停止することを意味します。インスペクションを無効にすると、現在のインスペクションプロファイルで無効になります。他のプロファイルでは有効のままです。インスペクションを無効にする:設定でインスペクションを無効に

重複ツールウィンドウ

重複ツールウィンドウに重複の検索結果が表示されます。IntelliJ IDEA が重複コードの検索アクションの初期結果を表示した後、重複ツールウィンドウはを通してアクセス可能です。重複ツールウィンドウのペイン:このウィンドウは、次のペインで構成されています。左側のペインには、ソースコードの重複フラグメントのツリービューが表示されます。各ノードには次の情報が表示されます。スコープ内で検出された複製されたコードフラグメントの数。重複の「コスト」(コードブロックサイズの基底に加法アルゴリズムを使用し...