検索テンプレート、修飾子、スクリプトの制約
構造検索用のテンプレートを作成するときは、基本的にスクリプトを作成します。スクリプト作成プロセスを簡素化するために、IntelliJ IDEA は、検索テンプレートのプロトタイプとして使用できる事前定義された検索テンプレートのリストを提供します。
既存の検索と置換テンプレートのリストにアクセスする方法については、構造的な検索と置換のセクションを参照してください。
各検索または置換テンプレートは、条件 (修飾子) を追加して検索結果を絞り込むことができる変数 $variable_name$
で構成されます。修飾子は、検索テンプレートの変数に依存します。
カウント修飾子
カウント修飾子は、出現回数を指定します。
例: new java.lang.RuntimeException($x$)
検索テンプレートで、$x$
変数の場合、カウント修飾子フィールドに最小数と最大数を指定します。無制限の最大数を設定するには、修飾子フィールドに空の値を指定します。
IntelliJ IDEA は変数に [0, ∞ ]
を追加し、指定された範囲の数値を検索します。
参照修飾子
リファレンス修飾子を使用すると、変数内の他の検索テンプレートを参照できます。
参照には常に事前設定または保存されたテンプレートの名前が含まれ、自動補完を使用してこのフィールドに入力できます。
例: $MethodCalls$
変数の場合、リファレンス修飾子フィールドにアノテーション付きのメソッドを入力します。
IntelliJ IDEA は、アノテーション付きのメソッドへのメソッド呼び出しを検索します。
型修飾子
タイプ修飾子は、指定された変数に期待される値または式の型を追加します。
例: $expression$
変数の場合、タイプ修飾子フィールドに int
と入力します。
IntelliJ IDEA は、ボクシングが実行される場所を整数で検索します。
テキストフィルター
テキスト修飾子は、正規表現またはプレーンテキストに対して変数をチェックします。
例: 特定のインターフェースを実装するクラスを検索できます。この場合、テキスト修飾子にインターフェースの完全修飾名を追加します。また、型階層の中オプションを選択すると、Cloneable
を間接的に実装するクラスも検索に含まれます。このオプションが選択されていない場合、Cloneable
を直接実装するクラスのみが含まれます。
スクリプト制約
スクリプト修飾子は、Groovy スクリプト制約を検索テンプレートに追加します。スクリプト制約は、特定の言語構造を検索するときに使用されます。
例: 指定された数のパラメーターを持つコンストラクター、または指定された可視性修飾子を持つメンバー
テンプレートで使用されるすべての変数には、スクリプトの制約からアクセスできます。スクリプト制約を変数に追加すると、IntelliJ IDEA はそれを PSI ツリーと照合します。この変数は、実際には PSI ツリーのノードです(英語)。
たとえば、メソッドにマッチする変数、toString()
メソッドがあるとします。この変数は実際には PsiMethod
ノードです。variable.parent
を取得すると、PsiClass
ノードなどが生成されます。variable.text
はメソッドのテキスト全体を表示します。メソッドの名前だけが必要な場合は、variable.name
を使用できます。
別のケースでは、構造検索と置換変数は、変数、PsiReferenceExpression
への参照など、一部の式に一致することがあります。式には名前はありませんが、式のテキスト全体を検索すると、その変数が参照している変数の名前が表示されます。
次の既存のテンプレートで使用されているスクリプト制約の構文を確認できます。
定数パラメーターを使用したサンプルメソッドの呼び出し
クラス
パラメーターのないコンストラクターを持つクラス
final ではない static フィールド
未実装または未拡張のインターフェース
フィールド / 変数の読み込み
名テンプレートが更新されたフィールド / 変数
関連ページ:
構造検索と置換
従来の検索プロセスでは、ソースコードの構文とセマンティクスが考慮されていません。正規表現を使用している場合でも、IntelliJ IDEA はコードを正規表現として扱います。構造検索および置換(SSR)アクションを使用すると、コード構造を考慮して、コード内の特定のコードパターンまたは文法構造を検索できます。IntelliJ IDEA は、作成した検索テンプレートと適用した条件に基づいて、ソースコードのフラグメントを見つけて置き換えます。ターゲットを構造的に検索するに移動して、構造検索ダイアログを...
構造検索と置換の例
ご存知のように、通常の検索と構造検索の主な違いは、構造検索ではプログラミング言語の構造テンプレートを探していることです。構造検索の利点は、既存のテンプレートに基づいてパターンを作成し、コードの検索と置換にかかる時間を節約できることです。既存のテンプレートの広範なリストは、単純なパターンからより複雑なパターンまで、多くのユースケースをカバーしています。パターン内の各アイテムは、両側の $ 記号によって制限される変数で構成されます。パターンの例:簡単なタスクから始めて、キーワードを使用して開いてい...