如何让 IntelliJ 标记 toString() 的任何实现?

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

我们使用 Lombok,我的架构师希望我们始终使用 Lombok

@ToString
而不是自定义实现。

我希望 IntelliJ 将任何

toString()
实现标记为警告。

我该怎么做?

我使用IntelliJ Ultimate 2023.3

java intellij-idea tostring intellij-inspections
1个回答
0
投票

您可以创建自己的检查

转到“设置”->“编辑器”->“检查”,然后单击“+”按钮:

根据您是否想要“快速修复”问题,选择“添加结构搜索检查”或“添加结构替换检查”。

这是一个示例,查找其中包含

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$() {&#10;    $Statements$;&#10;}" 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$ {&#10;    public String toString() {&#10;        $Statements$;&#10;    }&#10;    $OtherMembers$&#10;}" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="@ToString&#10;class $ClassName$ {&#10;    $OtherMembers$&#10;}">
        <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>
© www.soinside.com 2019 - 2024. All rights reserved.