我试图通过使用检查来建议替换该方法以使其成为静态,来查找并替换
@JsonCreator
在非静态方法上的所有用法。我有以下模板:
// Search template
@$Annotation$
$MethodType$ $Method$($ParameterType$ $Parameter$)
/** Modifiers
* Annotation{count=[1, inf], text=JsonCreator}
* Method{Script=!__context__.hasModifierProperty("static")}
* Parameter{count=[0, inf]}
*/
// Replace template
@$Annotation$
static $MethodType$ $Method$($ParameterType$ $Parameter$)
/** Modifiers
* Annotation{count=[1, inf], text=JsonCreator}
* Method{Script=!__context__.hasModifierProperty("static")}
* Parameter{count=[0, inf]}
*/
当搜索目标是
Complete Match
或 Method
时,这将按预期工作,执行以下操作:
// Before
@JsonCreator
BasicEnum fromString(String value)
{
// ...
}
// After
@JsonCreator
static BasicEnum fromString(String value)
{
// ...
}
但是,当目标为
Annotation
时,它会失败,而是执行以下操作。
// Before
@JsonCreator
BasicEnum fromString(String value)
{
// ...
}
//After
BasicEnum fromString(String value)
{
// ...
}
它删除了注释并且不添加 static 修饰符。
我希望目标是
Annotation
,因为在整个方法中显示警告波浪线感觉很笨拙。为什么定位Annotation
时替换失败?有没有办法解决这个问题,使波浪线只出现在注释上?
要注意的是,我知道
@JsonCreator
也可以用于构造函数方法,但管理这些不是我现在关心的事情。我只是想找到 @JsonCreator
用于非静态方法的情况,并提供检查来替换。
为什么不使用“Method”作为目标呢?替换修改的是方法,而不是注释。然后仅突出显示方法名称。
当前的行为似乎是某种错误。可以使用如下模板来解决它:
<replaceConfiguration name="Squigly" text="class $A$ { @$Annotation$ $MethodType$ $Method$($ParameterType$ $Parameter$); }" recursive="false" type="JAVA" pattern_context="default" search_injected="false" reformatAccordingToStyle="true" shortenFQN="true" replacement="@$Annotation$ static">
<constraint name="__context__" within="" contains="" />
<constraint name="Annotation" regexp="JsonCreator" target="true" within="" contains="" />
<constraint name="MethodType" within="" contains="" />
<constraint name="Method" script=""!__context__.hasModifierProperty("static")"" within="" contains="" />
<constraint name="ParameterType" within="" contains="" />
<constraint name="Parameter" minCount="0" maxCount="2147483647" within="" contains="" />
<constraint name="A" within="" contains="" />
</replaceConfiguration>
(使用现有模板面板上方对话框左上方工具栏中的“从剪贴板导入模板”按钮)
不幸的是,最终结果的格式不太好:
//After
@JsonCreator
static
BasicEnum fromString(String value)
{
// ...
}