IntelliJ IDEA结构搜索和替代的示例
一个语句
$Statement$;
将事件发生次数增加到一定数量,您可以找到包含指定数量的元素的语句序列。
方法调用
$Instance$.$MethodCall$($Arguments$)
此模板与方法调用表达式匹配。如果出现的次数为零, 则表示可以省略方法调用。
if 语句
if ($Expr$) {
$ThenStatements$;
}
else {
$ElseStatements$;
}
在注释或字符串文本中搜索
如果要找一个包含 "foo" 的注释或文字,搜索模板将是 $SomethingWeWantToFind$ 或 "$SomethingWeWantToFind$"。如果想要查找包含某些特定单词的注释/字符串(例如,将 foo 作为一个词),则应将其指定为文本约束。
搜索类的构造函数
使用默认变量设置的类的搜索模板构造函数允许在指定范围内的每个类中只找到一个构造函数。如果类有几个构造函数,那么找到多个构造函数,则您需要在$ class $变量中设置发生计数的最大值选项。有关更多信息,请参阅编辑变量对话框。
请注意,类声明也将包含在查找事件的列表中。
添加 try / catch / finally 代码
如果想用 try/catch/finally 结构替换一个语句,可以建议使用下面的一对搜索和替换模板。搜索模板是:
$Statements$;
具有指定为约束的特定最大出现次数。
替换模板是:
try {
$Statements$;
}
catch(Exception ex) {
}
查找实现某个接口的类或所有类的所有后代
考虑以下搜索模板:
class $Clazz$ extends $AnotherClass$ {}
或者
class $Clazz$ implements $SomeInterface$ {}
作为变量 $ AnotherClass $ 或 $ SomeInterface $ 的文本约束,指定基类或实现的接口的名称。
找到所有这些方法
要查找相同接口方法的不同实现,请使用以下搜索模板:
class $a$ {
public void $show$();
}
指定 $show$ 变量的文本约束,并启用“该变量是搜索的目标”选项。
使用 @Modifier 查找包本地和实例方法
IntelliJ IDEA 建议为一个类的本地和实例字段预定义模板。这些模板使用了 @Modifier 注释,有助于描述搜索目标,当没有办法用自然语言表达它时。
但是,如果您需要搜索本地包或实例方法,则必须自己创建相应的搜索模板,然后应用 @Modifier注释。
指定使用可见性修饰符本地包和实例查找所有方法的条件,使用以下搜索模板:
class
$Class$ {
@Modifier("packageLocal") @Modifier("Instance" ) $ReturnType$ $MethodName$($ParameterType$ $Parameter$);
}
}
在搜索中使用“包含约束”字段
现有示例使用以下模板:
LOG.debug($params$);
在 _a 和 _st 是变量并且 * 表示 "约束" 字段中包含的零个或多个匹配项,并选中 "完全匹配变量" 的 "反转条件" 复选框的地方放置 if (' _a) {' _st *;} 将导致日志记录搜索不包含在 if 语句中。
搜索 XML 和 HTML 标签、属性及其值
搜索标签的最简单的模板是:<$a$/>
通过将约束放在变量 $a$ 上,您可以指定要查找的标签。例如,如果指定了 text / regexp 约束:app.+,您将发现这些标记的名称以 app 开头。
用于在 XML 和 HTML 中搜索的更通用的模板 <$tag$ $attribute$="$value$"/> 。通过使用具有正确指定的搜索设置和约束的此模板,您可以发现几乎可能发生在XML 或 HTML 中的任何内容。例如,如果您指定了text / regexp 约束的 width 为 $attribute$,则 $attribute$ 可以找到具有该 width 属性的所有标签。
使用脚本约束
IntelliJ IDEA 结构搜索可让您使用无法使用 UI 指定的高级约束。
以下模板为例:
该约束是使用 Groovy 脚本语言和 IntelliJ IDEA PSI API 为您搜索的语言指定的。Groovy 约束适用于可以应用结构搜索的任何语言。