我们使用 Lombok,我的架构师希望我们始终使用 Lombok
@ToString
而不是自定义实现。
我希望 IntelliJ 将任何
toString()
实现标记为警告。
我该怎么做?
我使用IntelliJ Ultimate 2023.3
您可以创建自己的检查。
转到“设置”->“编辑器”->“检查”,然后单击“+”按钮:
根据您是否想要“快速修复”问题,选择“添加结构搜索检查”或“添加结构替换检查”。
这是一个示例,查找其中包含
toString
的类,并将其替换为相同的类但删除了该方法,并添加 @ToString
注释。
找到:
class $ClassName$ {
public String toString() {
$Statements$;
}
$OtherMembers$
}
请注意,
$Statements$
上有一个计数修饰符,允许 0 个或更多实例
(由于这是由 Structural Search 提供支持,因此
public String toString()
还匹配 final
toString
方法等。)
替换为:
@lombok.ToString
class $ClassName$ {
$OtherMembers$
}
请注意,这将突出显示整个类,因为需要替换整个类。
或者,您可以直接查找
toString
的实例。你只需要找到:
public String $toString$() {
$Statements$;
}
$toString$
上有一个文本修饰符,确保其文本始终为 toString
。通过这种方式,您可以将匹配目标设置为 $toString$
,仅突出显示 toString
部分。同样,$Statements$
上有一个计数修饰符。确保“语言”选项设置为“Java - 类成员”。
最后,这是上述检查导出的XML文件。您可以在检查设置页面导入它。
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Some Name" />
<inspection_tool class="SSBasedInspection" enabled="true" level="WARNING" enabled_by_default="true">
<searchConfiguration name="No toStrings" uuid="7d07a3df-3fe8-3f60-9714-6cd79f56ae5e" text="public String $toString$() { $Statements$; }" recursive="true" caseInsensitive="true" type="JAVA" pattern_context="member">
<constraint name="__context__" within="" contains="" />
<constraint name="Statements" minCount="0" maxCount="2147483647" within="" contains="" />
<constraint name="toString" regexp="toString" target="true" within="" contains="" />
</searchConfiguration>
<replaceConfiguration name="No toStrings wtih replacement" uuid="6ad09c43-eac2-3f8f-b2c3-8061201ea2ad" text="class $ClassName$ { public String toString() { $Statements$; } $OtherMembers$ }" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="@ToString class $ClassName$ { $OtherMembers$ }">
<constraint name="__context__" within="" contains="" />
<constraint name="Statements" minCount="0" maxCount="2147483647" within="" contains="" />
<constraint name="ClassName" within="" contains="" />
<constraint name="OtherMembers" within="" contains="" />
</replaceConfiguration>
</inspection_tool>
</profile>
</component>