構造検索を使用して置換する
構造検索と置換は、コードの特定のパターンを検索し、検索を絞り込む修飾子を追加できる強力なツールです。
このチュートリアルでは、フィールド宣言を検索し、修飾子を追加し、変更されたテンプレートに基づいてコードインスペクションを作成します。必要に応じて、詳細に入る前に関連するビデオを見ることができます。ビデオは、以前のバージョンの IntelliJ IDEA 用に作成されたものであるため、若干異なる場合があります。
構造検索ダイアログを開き、既存のテンプレートの 1 つを検索に使用します。
既存のテンプレートを使用する (フィールド宣言)
メインメニューで、
に移動します。構造検索ダイアログの ノードで、すべてのフィールド宣言を検索するクラスの全フィールドを選択し、検索をクリックします。
その結果、検索ツールウィンドウでは、IntelliJ IDEA は Java コードで宣言されたすべてのフィールドを表示します。
次に、構造検索ダイアログに戻り、事前定義されたテンプレートを少し変更します。ちなみに、どこでも検索ウィンドウを使用して、検索ダイアログにアクセスできます。
事前定義されたテンプレートを変更する
Shift を 2 回押して、どこでも検索ウィンドウを開きます。
検索クエリの入力を開始し、検索結果のリストで構造検索をクリックして構造検索ダイアログを開きます。
構造検索ダイアログで、
$Field$
変数の前にfinal
を追加して、最終フィールドのみを検索するようにテンプレートを更新しましょう。ダイアログでコード補完がサポートされていることに注意してください。コードを再帰的に検索し、大文字と小文字を一致させ、Java タイプのファイルのみを検索します。
スコープを変更すると、IntelliJ IDEA は指定されたスコープでコードパターンが見つかるかどうかをすぐに通知できます。
検索ツールウィンドウで結果を確認してください。
構造検索を使用すると、興味深い検索を実行できます。例として、別の既存のテンプレート(メソッド呼び出し)を選択してみましょう。
既存のテンプレートを使用する (メソッド呼び出し)
構造検索ダイアログで、
をクリックし、既存テンプレートを選択します。
既存のテンプレートのリストを開き、式ノードのメソッド呼び出しテンプレートを選択します。
ここで検索を実行すると、コード内のすべてのメソッド呼び出しを含む結果が得られます。テンプレートを少し変更し、探しているものをより具体的にするために修飾子を使用する必要があります。修飾子
Text
を追加して、print
というメソッドを定義しましょう。print
というメソッドの呼び出しを探します。正規表現を追加できます。たとえば、
print
を含むメソッドへのすべての呼び出しを検索できます。そのために、print
をprint.*
に切り替えましょう。検索結果には、印刷だけでなく
println
およびprintf
も含まれます。検索パターンを変更して、1 つのパラメーターのみを受け取るメソッドのみが結果に表示されるようにします。
$Parameter$
変数をクリックし、カウント修飾子min=1
max=1
を追加します。この場合、検索結果は少なくなります。
これらのすべてのメソッド呼び出しを System.out
ではなくロギング呼び出しに置き換えるために、この検索を実行していると仮定します。ロギングメソッドは文字列のみを取り、他のタイプは取りません。
まず、文字列を渡すメソッドを見つけましょう。
構造検索ダイアログで、
$Parameter$
変数の修飾子タイプを追加します。検索をクリックします。その結果、リテラル文字列または型
String
の変数のみを取る印刷メソッドのリストが表示されます。
さあ、交換しましょう。
コードを置き換える
構造置換にアクセスするには、どこでも検索ウィンドウを使用します。
置換テンプレートの構造置換ダイアログで、検索結果を置き換えるコードを追加します。私たちの場合は
java.util.logging.Logger.getLogger(this.getClass().getName()).fine($Parameter$)
です検索をクリックします。
検索ツールウィンドウで結果を確認し、置換オプションを使用して、すべての結果または選択した結果のみを置き換えます。
ご覧のとおり、コードが変更されています。
このテンプレートを保存して、後で参照することができます。
変更したテンプレートを保存する
構造置換ダイアログで、
をクリックします。
表示されたリストで、「テンプレートの保存」を選択します。
テンプレートの名前(print String コール)を追加して、OK をクリックしましょう。
テンプレートは、既存テンプレートダイアログのユーザー定義ノードに保存されます。
構造置換ダイアログで、
をクリックして、最近の検索の履歴を確認し、すばやく再実行できます。
テンプレートをインスペクションとして使用することもできるため、同じコードに遭遇すると警告が表示され、コードをすばやく置き換えることができます。
カスタムインスペクションを作成する
検索ツールウィンドウで、置換パターンの結果が表示されたら、テンプレートからインスペクションを作成をクリックします。
開いたダイアログで、テンプレート
print String calls
の名前を追加しましょう。必要に応じて、ツールチップを追加して OK をクリックできます。
設定ダイアログ(Ctrl+Alt+S)で、 に移動します。
インスペクションページで構造検索ノードを開き、作成されたインスペクションを見つけます。
これで、エディターでコードをすばやく修正したり、問題ビューを使用して警告を確認したり、新しいコードに置き換えたりすることができます。
インスペクション設定から直接、カスタム構造検索インスペクションを追加できます。
インスペクション設定からカスタムインスペクションを作成する
設定ダイアログ(Ctrl+Alt+S)で、 に移動します。
インスペクションページで、構造検索ノードを選択し、
をクリックします。インスペクションは、検索テンプレートまたは置換テンプレートに基づいて作成できます。置換テンプレートの追加を選択します。
構造置換ダイアログで、検索パターンを少し変更してみましょう。
$Parameter$
変数のType
修飾子をint
に変更しましょう。replace パターンで、コードを微調整しましょう。
java.util.logging.Logger.getLogger(this.getClass().getName()).fine(String.valueOf($Parameter$))
開いたダイアログでインスペクション
print int calls
の名前を追加して、OK をクリックします。新しいインスペクションが構造検索に追加され、整数を出力するインスタンスを検索するために実行できます。このようなコードが見つかったら、ロガー呼び出しに置き換えて、見つかったパラメーターを文字列に変換できます。
インスペクションは、その名前を使用して個別に実行できます。
構造検索インスペクションを実行する
Ctrl+Alt+Shift+I を押すか、メインメニューで
に移動します。開いたダイアログで、インスペクション
print String calls
の名前を入力しましょう。実行 'print String calls' ダイアログでは、デフォルトのオプションをそのままにして、OK をクリックします。
インスペクション結果ツールウィンドウで結果を確認できます。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.3/toggle_filter_panel.png)
構造検索と置換の例
ご存知のように、通常の検索と構造検索の主な違いは、構造検索ではプログラミング言語の構造テンプレートを探していることです。構造検索の利点は、既存のテンプレートに基づいてパターンを作成し、コードの検索と置換にかかる時間を節約できることです。既存のテンプレートの広範なリストは、単純なパターンからより複雑なパターンまで、多くのユースケースをカバーしています。パターン内の各アイテムは、両側の $ 記号によって制限される変数で構成されます。パターンの例:簡単なタスクから始めて、キーワードを使用して開いてい...
![](https://pleiades.io/icons/idea.png)
構造検索と置換ダイアログ
これらのダイアログを使用して、提案された検索テンプレートに構造的に一致するコードのフラグメントを検索および置換します。検索テンプレートこのテキスト領域を使用して、IntelliJ IDEA が検索プロセスを実行するベースのテンプレートを指定します。フィールドにテンプレートコードを入力するか、をクリックして既存テンプレートオプションを選択し、既存のテンプレートのリストを表示できます。両方大 / 小文字を区別する検索するコードの大文字と小文字を IntelliJ IDEA に一致させる場合は、このチ...