チュートリアル: Kotlin での構造検索と置換
構造検索と置換は、コード内の特定のパターンを検索し、自動化された方法でそれを置換できる強力なツールです。
このチュートリアルでは、テンプレートとフィルターについて理解し、事前定義されたテンプレートを変更して、それに基づいてコードインスペクションを作成します。
このチュートリアルでカバーされている機能は、 構造検索と置換 が実行できることの完全なリストではありません。 私たちのゴールは、始められるようにすることです。 その後、さまざまなテンプレート、フィルター、オプションを調べ、組み合わせて独自の特定の検索を作成できます。
チュートリアルでは、次のコードを使用します。
構造的に検索を開くダイアログ
メインメニューで へ移動します。
既存のテンプレートを使用する (プロパティ宣言)
構造検索 ダイアログで、左側のリストから Kotlin を選択します。
クラスベース ノードを展開し、 クラスのすべてのvar をクリックします。
Kotlin が 言語(L) として選択されていることを確認してください。 これにより、検索は Kotlin ファイルのみに適用されます。

検索 をクリックして検索を実行します。 その結果、 検索 ツールウィンドウに、IntelliJ IDEA は Kotlin クラスで宣言されたすべてのプロパティを表示します。

再実行
構造検索 ダイアログで、 最近 ノードを展開して、最近の検索の履歴を参照し、それらのいずれかをすばやく再実行します。
次に、構造検索ダイアログに戻り、事前定義されたテンプレートを少し変更します。
事前定義されたテンプレートを変更する
構造検索 ダイアログで、
$Field$変数の前にopenを追加して、開いているプロパティのみを検索するようにテンプレートを更新しましょう。
検索 をクリックし、 検索 ツールウィンドウで結果を確認します。

ご覧のとおり、今回の検索ではフィルターが使用され、現在開いているプロパティのみが表示されます。
構造検索 を使用すると、いくつかの興味深い検索を実行できます。 例として、別の既存のテンプレート(メソッド呼び出し )を選択しましょう。 この検索を実行して、すべての print ステートメントをロギング呼び出しに置き換え、引数として String を持たないすべての呼び出しを除外するとします。
関数呼び出しを置き換える
メインメニューで へ移動します。
ノードで、 メソッド呼び出し を選択します。

ここで検索を実行すると、コード内のすべての関数呼び出しを含む結果が得られます。 テンプレートを少し変更し、フィルターを使用して、探しているものをより具体的にする必要があります。
キャレットを
$MethodCall$に配置し、右側のペインで 修飾子の追加 をクリックします。print.*の値で テキスト フィルターを追加します。
キャレットを
$Before$に置き、右側のペインで、唯一の修飾子がCount=[0,1]であることを確認します。キャレットを
$Parameter$に配置し、右側のペインでをクリックします。
Stringの値で タイプ フィルターを追加します。
置換テンプレート 領域に置換コードを追加します:
java.util.logging.Logger.getLogger(this.javaClass.getName()).fine($Parameter$)
検索 ツールウィンドウで結果を確認し、置換オプションを使用して、置換する結果を選択します。

必要に応じて、後で使用するためにこのテンプレートを保存できます。
テンプレートの保存
構造置換 ダイアログで、
をクリックします。
表示されたリストで、 現在のテンプレートを保存 を選択します。
テンプレートの名前を指定して、 OK をクリックします。

テンプレートは 保存済みテンプレート ノードに保存されます。

テンプレートをインスペクションとして使用することもできるため、同じコードに遭遇すると警告が表示され、コードをすばやく置き換えることができます。
カスタム検査を作成する
置換パターンの結果が表示される 検索 ツールウィンドウで、 テンプレートからインスペクションを作成 をクリックします。

開いたダイアログで、インスペクションの名前を追加します。 必要に応じて、ツールチップを追加します (ハイライトされたコードの上にマウスを置くと、問題のより詳細な説明が表示されます)。 OK をクリックします。
新しく作成されたインスペクションは、 の 構造検索 ノードに表示されます。