我正在尝试使用 IntelliJ 中的结构搜索和替换模板创建检查,该检查将仅在局部范围内将泛型声明转换为 var 声明。例如,我想这样转换代码:
Map<String, List<String>> myVar = new ConcurrentHashMap<>(10, 2);
至:
var myVar = new ConcurrentHashMap<String, List<String>>(10, 2);
我创建了一个匹配通用声明的搜索模板,以及一个用 var 声明替换它的替换模板。我还添加了一个脚本约束来限制搜索和替换仅限于本地范围:
搜索:
$Type$<$GenericArgument$> $Var$ = new $Ctor$<>($Params$);
替换:
var $Var$ = new $Ctor$<$GenericArgument$>($Params$);
完全替换配置:
<replaceConfiguration name="replace with var" text="$Type$<$GenericArgument$> $Var$ = new $Ctor$<>($Params$);" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" useStaticImport="true" replacement="var $Var$ = new $Ctor$<$GenericArgument$>($Params$); ">
<constraint name="__context__" script=""__context__.getParent() instanceof com.intellij.psi.PsiCodeBlock"" within="" contains="" />
<constraint name="Type" within="" contains="" />
<constraint name="GenericArgument" minCount="0" maxCount="2147483647" within="" contains="" />
<constraint name="Var" within="" contains="" />
<constraint name="Params" minCount="0" maxCount="2147483647" within="" contains="" />
<constraint name="Ctor" within="" contains="" />
</replaceConfiguration>
但是,当我运行结构搜索和替换时,生成的代码缺少通用参数之间的逗号:
var myVar = new ConcurrentHashMap<String List<String>>(10, 2);
如何修改我的搜索和替换模板以在通用参数之间包含逗号?