结构化搜索与替换(ssr)是java项目中为feign接口参数精准添加@param注解的唯一可靠方案,它基于ast解析而非文本匹配,可正确处理泛型、换行、空格等边界情况。

当你需要在Java项目中批量为Feign接口方法的每个参数添加@Param注解,又担心正则表达式漏匹配泛型、换行、空格不一致等边界情况时,结构化搜索与替换(SSR)是唯一能精准命中所有参数节点的方案——它不扫描文本,而是解析AST语法树。
打开结构化搜索对话框
按 Ctrl+Shift+A → 输入“Structural Search” → 回车,或从顶部菜单选择 Edit → Find → Search Structurally。
注意:不要误点“Find in Files”,那是纯文本搜索,对代码结构无效。
选用并改造Java方法参数模板
点击对话框右上角的 扳手图标(Existing Templates) → 展开 Java 节点 → 找到 Method declaration with parameters → 双击选中。
此时编辑器区域会自动填充类似 void $method$($ParameterType$ $Parameter$); 的模板。这个模板只匹配方法声明本身,不包含参数列表内部结构,必须改造。
将模板改为:void $method$($ParameterType$ $Parameter$); → 删除分号前的空格,把 $Parameter$ 拆成两个变量:void $method$($ParameterType$ $ParameterName$);。这样后续才能单独约束参数名和类型。
为参数变量添加文本过滤条件
点击 Edit Variables… 按钮。
在变量列表中找到 $ParameterName$ → 在 Text/regexp 栏输入:^[a-zA-Z_$][a-zA-Z0-9_$]*$ → 勾选 Case sensitive。
【必须勾选】 同时勾选 This variable is target of the search,否则后续无法对参数节点做替换操作。
回到主对话框,点击 Find。IDEA 会在编辑器中高亮所有匹配的方法声明——但此时只是定位,尚未进入替换阶段。
切换到结构化替换模式
点击对话框左上角的 Replace Structurally 标签页(或直接按 Ctrl+Shift+R 快捷键)。
保持搜索模板不变,将下方的 Replace template 编辑区内容替换为:void $method$(@Param("$ParameterName$") $ParameterType$ $ParameterName$);
确保 $ParameterName$ 在替换模板中出现两次:一次作为注解值字符串,一次作为参数名本身。若只写一次,会导致参数名丢失。
执行精准替换
点击 Find 确认所有待替换项无误 → 点击 Replace 逐条确认,或点击 Replace All 一次性完成。
替换后,原 String name 会变成 @Param("name") String name,泛型如 List<user> users</user> 也会被正确包裹,中间的换行、空格、注释均不受影响。











