如何在 IntelliJ 中使用结构搜索和替换将 Java 泛型声明仅在局部范围内转换为 var 声明?

问题描述 投票:0回答:0

我正在尝试使用 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$&lt;$GenericArgument$&gt; $Var$ = new $Ctor$&lt;&gt;($Params$);" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" useStaticImport="true" replacement="var $Var$ = new $Ctor$&lt;$GenericArgument$&gt;($Params$);&#10;">
   <constraint name="__context__" script="&quot;__context__.getParent() instanceof com.intellij.psi.PsiCodeBlock&quot;" 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);

如何修改我的搜索和替换模板以在通用参数之间包含逗号?

java intellij-idea search replace
© www.soinside.com 2019 - 2024. All rights reserved.