如何用IntelliJ SSR从初始化表达式提取结构化信息?
能否用IntelliJ SSR从构造函数调用中提取信息并转换为结构化格式?
示例代码
public enum Model { TOYOTA, FORD } public enum Dealership { TOYOTA_GRAND_PRIX(Model.TOYOTA, Set.of("LAND-CRUISER", "AVENSIS")), FORD_DELUXE(Model.FORD, Set.of("FOCUS")); private final Model model; private final Set<String> brands; }
期望结构化结果
[ { "model": "TOYOTA", "brands": ["LAND-CRUISER", "AVENSIS"] }, { "model": "FORD", "brands": ["FOCUS"] } ]
实现方案
完全可以用IntelliJ的**结构搜索替换(SSR)**实现这个需求,具体步骤如下:
打开结构搜索对话框:使用快捷键
Ctrl+Shift+S,或通过菜单Edit > Find > Search Structurally打开。编写搜索模板,匹配枚举常量的构造调用:
$ENUM_CONSTANT$($MODEL$, Set.of($BRANDS$));为变量设置约束:
$ENUM_CONSTANT$:指定类型为Dealership枚举的常量$MODEL$:匹配Model枚举实例,后续提取其名称$BRANDS$:匹配多个字符串字面量参数
编写替换模板并配置脚本处理:
切换到「Replace」标签页,使用JSON片段作为替换模板,同时用Groovy脚本处理变量转换:{ "model": "$MODEL_NAME$", "brands": [$BRANDS_LIST$] }脚本映射规则:
$MODEL_NAME$:通过$MODEL$.name()提取枚举实例的名称(如Model.TOYOTA转为"TOYOTA")$BRANDS_LIST$:将$BRANDS$匹配到的多个字符串字面量转为带引号的逗号分隔列表(如"LAND-CRUISER", "AVENSIS")
生成最终结果:执行搜索替换后,将所有生成的JSON片段拼接,包裹上数组括号即可得到目标结构化结果。如果需要生成XML,只需将替换模板改为对应XML格式片段即可。
内容的提问来源于stack exchange,提问作者62mkv
相关产品推荐
相关产品推荐

