IntelliJ IDEA 2024.1 ヘルプ

構造検索を使用して置換する

構造検索と置換は、コードの特定のパターンを検索し、検索を絞り込む修飾子を追加できる強力なツールです。

このチュートリアルでは、フィールド宣言を検索し、修飾子を追加し、変更されたテンプレートに基づいてコードインスペクションを作成します。必要に応じて、詳細に入る前に関連するビデオを見ることができます。ビデオは、以前のバージョンの IntelliJ IDEA 用に作成されたものであるため、若干異なる場合があります。

構造検索ダイアログを開き、既存のテンプレートの 1 つを検索に使用します。

既存のテンプレートを使用する (フィールド宣言)

  1. メインメニューで、編集 | 検索 | 構造検索に移動します。

  2. 構造検索ダイアログの Java | クラスベースノードで、すべてのフィールド宣言を検索するクラスの全フィールドを選択し、検索をクリックします。

    the Existing Templates dialog

    その結果、検索ツールウィンドウでは、IntelliJ IDEA は Java コードで宣言されたすべてのフィールドを表示します。

    Find tool window: search results

次に、構造検索ダイアログに戻り、事前定義されたテンプレートを少し変更します。ちなみに、どこでも検索ウィンドウを使用して、検索ダイアログにアクセスできます。

事前定義されたテンプレートを変更する

  1. Shift を 2 回押して、どこでも検索ウィンドウを開きます。

  2. 検索クエリの入力を開始し、検索結果のリストで構造検索をクリックして構造検索ダイアログを開きます。

    Search Everywhere window
  3. 構造検索ダイアログで、$Field$ 変数の前に final を追加して、最終フィールドのみを検索するようにテンプレートを更新しましょう。ダイアログでコード補完がサポートされていることに注意してください。

    Code completion in the Structural Search dialog
  4. コードを再帰的に検索し、大文字と小文字を一致させ、Java タイプのファイルのみを検索します。

    Structural Search dialog: narrow search
  5. スコープを変更すると、IntelliJ IDEA は指定されたスコープでコードパターンが見つかるかどうかをすぐに通知できます。

    Structural Search dialog: module scope
  6. 検索ツールウィンドウで結果を確認してください。

    Find tool window: final field search result

構造検索を使用すると、興味深い検索を実行できます。例として、別の既存のテンプレート(メソッド呼び出し)を選択してみましょう。

既存のテンプレートを使用する (メソッド呼び出し)

  1. 構造検索ダイアログで、the Tools icon をクリックし、既存テンプレートを選択します。

  2. 既存のテンプレートのリストを開き、ノードのメソッド呼び出しテンプレートを選択します。

    Existing Templates dialog: method calls
  3. ここで検索を実行すると、コード内のすべてのメソッド呼び出しを含む結果が得られます。テンプレートを少し変更し、探しているものをより具体的にするために修飾子を使用する必要があります。修飾子 Text を追加して、print というメソッドを定義しましょう。print というメソッドの呼び出しを探します。

  4. 正規表現を追加できます。たとえば、print を含むメソッドへのすべての呼び出しを検索できます。そのために、printprint.* に切り替えましょう。

    検索結果には、印刷だけでなく println および printf も含まれます。

  5. 検索パターンを変更して、1 つのパラメーターのみを受け取るメソッドのみが結果に表示されるようにします。$Parameter$ 変数をクリックし、カウント修飾子 min=1 max=1 を追加します。

    Add the count modifier for parameter

    この場合、検索結果は少なくなります。

これらのすべてのメソッド呼び出しを System.out ではなくロギング呼び出しに置き換えるために、この検索を実行していると仮定します。ロギングメソッドは文字列のみを取り、他のタイプは取りません。

まず、文字列を渡すメソッドを見つけましょう。

  1. 構造検索ダイアログで、$Parameter$ 変数の修飾子タイプを追加します。

    Add type modifier string
  2. 検索をクリックします。その結果、リテラル文字列または型 String の変数のみを取る印刷メソッドのリストが表示されます。

    the Find tool window: results

さあ、交換しましょう。

コードを置き換える

  1. 構造置換にアクセスするには、どこでも検索ウィンドウを使用します。

  2. 置換テンプレート構造置換ダイアログで、検索結果を置き換えるコードを追加します。私たちの場合は java.util.logging.Logger.getLogger(this.getClass().getName()).fine($Parameter$) です

    The Structural Replace dialog: replace pattern

    検索をクリックします。

  3. 検索ツールウィンドウで結果を確認し、置換オプションを使用して、すべての結果または選択した結果のみを置き換えます。

    the Find tool window: replace results

    ご覧のとおり、コードが変更されています。

    the replace results

このテンプレートを保存して、後で参照することができます。

変更したテンプレートを保存する

  1. 構造置換ダイアログで、Tools をクリックします。

  2. 表示されたリストで、「テンプレートの保存」を選択します。

  3. テンプレートの名前(print String コール)を追加して、OK をクリックしましょう。

    テンプレートは、既存テンプレートダイアログのユーザー定義ノードに保存されます。

    the saved template

    構造置換ダイアログで、the Search icon をクリックして、最近の検索の履歴を確認し、すばやく再実行できます。

    the recent entries

テンプレートをインスペクションとして使用することもできるため、同じコードに遭遇すると警告が表示され、コードをすばやく置き換えることができます。

カスタムインスペクションを作成する

  1. 検索ツールウィンドウで、置換パターンの結果が表示されたら、テンプレートからインスペクションを作成をクリックします。

  2. 開いたダイアログで、テンプレート print String calls の名前を追加しましょう。

    the Structural Search Inspection dialog

    必要に応じて、ツールチップを追加して OK をクリックできます。

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

  4. インスペクションページで構造検索ノードを開き、作成されたインスペクションを見つけます。

    the Inspections settings: Structural search inspection

    これで、エディターでコードをすばやく修正したり、問題ビューを使用して警告を確認したり、新しいコードに置き換えたりすることができます。

    the Problems view

インスペクション設定から直接、カスタム構造検索インスペクションを追加できます。

インスペクション設定からカスタムインスペクションを作成する

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

  2. インスペクションページで、構造検索ノードを選択し、Add structural search replace inspection をクリックします。インスペクションは、検索テンプレートまたは置換テンプレートに基づいて作成できます。置換テンプレートの追加を選択します。

  3. 構造置換ダイアログで、検索パターンを少し変更してみましょう。$Parameter$ 変数の Type 修飾子を int に変更しましょう。

  4. replace パターンで、コードを微調整しましょう。java.util.logging.Logger.getLogger(this.getClass().getName()).fine(String.valueOf($Parameter$))

    Change pattern
  5. 開いたダイアログでインスペクション print int calls の名前を追加して、OK をクリックします。

    Inspection name

    新しいインスペクションが構造検索に追加され、整数を出力するインスタンスを検索するために実行できます。このようなコードが見つかったら、ロガー呼び出しに置き換えて、見つかったパラメーターを文字列に変換できます。

インスペクションは、その名前を使用して個別に実行できます。

構造検索インスペクションを実行する

  1. Ctrl+Alt+Shift+I を押すか、メインメニューでコード | コードの解析 | インスペクション名を指定して実行に移動します。

  2. 開いたダイアログで、インスペクション print String calls の名前を入力しましょう。

    Enter inspection name
  3. 実行 'print String calls' ダイアログでは、デフォルトのオプションをそのままにして、OK をクリックします。

    Inspection scope
  4. インスペクション結果ツールウィンドウで結果を確認できます。

    Inspection results

関連ページ:

構造検索と置換の例

ご存知のように、通常の検索と構造検索の主な違いは、構造検索ではプログラミング言語の構造テンプレートを探していることです。構造検索の利点は、既存のテンプレートに基づいてパターンを作成し、コードの検索と置換にかかる時間を節約できることです。既存のテンプレートの広範なリストは、単純なパターンからより複雑なパターンまで、多くのユースケースをカバーしています。パターン内の各アイテムは、両側の $ 記号によって制限される変数で構成されます。パターンの例:簡単なタスクから始めて、キーワードを使用して開いてい...

構造検索と置換ダイアログ

これらのダイアログを使用して、提案された検索テンプレートに構造的に一致するコードのフラグメントを検索および置換します。検索テンプレートこのテキスト領域を使用して、IntelliJ IDEA が検索プロセスを実行するベースのテンプレートを指定します。フィールドにテンプレートコードを入力するか、をクリックして既存テンプレートオプションを選択し、既存のテンプレートのリストを表示できます。両方大 / 小文字を区別する検索するコードの大文字と小文字を IntelliJ IDEA に一致させる場合は、このチ...