教程:Kotlin 中的结构化搜索与替换
结构化搜索和替换是一种强大的工具,可以在代码中搜索特定模式并以自动化方式进行替换。
在本教程中,您将了解模板和过滤器,修改预定义模板,然后基于它创建代码检查。
本教程所涵盖的功能绝不是 结构化搜索和替换 的全部功能。 我们的目标是让您开始使用。 之后,您可以探索各种模板、过滤器和选项,并将它们结合起来创建您自己的特定搜索。
对于本教程,我们将使用以下代码:
打开结构化搜索对话框
在主菜单中,前往 。
使用现有模板(属性声明)
在 结构搜索 对话框中,从左侧列表中选择 Kotlin。
展开 基于类的 节点并点击 类的所有var。
确保 Kotlin 被选中为 语言(L)。 这样搜索仅适用于 Kotlin 文件。

点击 查找 以运行搜索。 因此,在 查找 工具窗口中,IntelliJ IDEA 显示 Kotlin 类中声明的所有属性。

重新运行
在 结构搜索 对话框中,展开 最近 节点以浏览最近搜索的历史记录,并快速重新运行其中的任何一个。
现在,让我们回到结构搜索对话框来稍微修改一下预定义模板。
更改预定义模板
在 结构搜索 对话框中,通过在
open变量之前添加$Field$,我们来更新我们的模板以仅搜索未关闭的属性。
点击 查找 并在 查找 工具窗口中检查结果。

正如您所见,这次搜索使用了过滤器,现在只显示了打开的属性。
通过 结构搜索 ,我们可以运行一些有趣的搜索。 让我们选择另一个现有的模板 (方法调用) 作为我们的示例。 假设我们正在执行此搜索以将所有 print 语句替换为日志调用,并排除所有不以 String 作为参数的调用。
替换函数调用
在主菜单中,前往 。
在 节点下,选择 方法调用。

如果我们现在运行搜索,结果将包括代码中的所有函数调用。 因此,我们应该稍微修改我们的模板,并使用过滤器来更具体地说明我们在寻找什么。
请将文本光标放置在
$MethodCall$处,然后在右侧窗格中点击 添加修饰符。 添加一个值为 文本 的print.*筛选器。
请将文本光标放在
$Before$,并确保在右侧窗格中唯一的修饰符是Count=[0,1]。请将文本光标放置在
$Parameter$处,然后在右侧窗格中点击。 添加一个值为 类型 的
String筛选器。
在 替换模板 区域,添加替换代码:
java.util.logging.Logger.getLogger(this.javaClass.getName()).fine($Parameter$)
请在 查找 工具窗口中检查结果,并使用替换选项选择您要替换的结果。

如果需要,我们可以保存此模板以供日后使用。
保存模板
在 结构替换 对话框中,点击
。
在打开的列表中,选择 保存当前模板。
请指定模板的名称,然后点击 确定。

模板已保存到 已保存的模板 节点下。

我们还可以将模板用作检查,因此当我们遇到相同代码时,会看到一个警告,并可以快速替换代码。
创建自定义检查
在 查找 工具窗口中,您会获得替换模式的结果,点击 从模板创建检查。

在打开的对话框中,添加检查的名称。 (可选)添加工具提示(悬停在高亮的代码上,会提供更详细的问题描述)。 点击 确定。
新建的检查会出现在 结构搜索 节点下的 。