我们使用Lombok,我的架构师希望我们始终使用Lombok @ToString,而不是定制实现.

我希望IntelliJ将任何toString()个实现标记为警告.

我该怎么做?

我使用IntelliJ旗舰版2023.3

推荐答案

你可以拿create your own inspections美元.

转到设置->;编辑器->;判断,然后点击"+"按钮:

enter image description here

根据您是否想要快速解决问题, Select "添加 struct 搜索判断"或"添加 struct 替换判断".

下面是一个查找其中包含toString的类的示例,并用相同的类替换它,但删除了该方法,并添加了@ToString注释.

查找:

class $ClassName$ {
    public String toString() {
        $Statements$;
    }
    $OtherMembers$
}

请注意,$Statements$上有一个计数修饰符,允许0个或更多个实例

(由于这是由Structural Search提供支持的,因此public String toString()还匹配finaltoString等方法.)

替换为:

@lombok.ToString
class $ClassName$ {
    $OtherMembers$
}

enter image description here

请注意,这将突出显示整个类,因为整个类都需要替换.


或者,您可以只创建findtoString个实例.您只需找到:

public String $toString$() {
    $Statements$;
}

$toString$上有一个文本修饰符,确保其文本始终为toString.通过这种方式,您可以将匹配目标设置为$toString$,只突出显示toString部分.同样,$Statements$上有一个计数修饰符.确保将"Language"选项设置为"Java-Class Members".

enter image description here

最后,下面是从上述判断中导出的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>

Java相关问答推荐

如何审查Java dtos中的自定义注释字段?

在Java 8之后,HashMap的最坏情况下时间复杂度仍然是O(n)而不是O(log n)?

如何在Docker容器中使用wireock—Webhooks阻止请求?

OpenJDK、4K显示和文本质量

JPackaged应用程序启动MSI调试,然后启动System. exit()

在spring—data中自动发现native—sql查询期间遇到重复的SQL别名[id]

在模拟超类中设置非setter属性的值

FALSE:它应该在什么时候使用?

JavaFX如何在MeshView中修复多个立方体?

Java编译器抛出可能未正确初始化的错误?

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

无法使用ApacheSpark依赖项构建JavaFX应用程序

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

将JSON字符串转换为Java类

寻找Thread.sky()方法的清晰度

在Java中将.GRF转换为图像文件

Java类型推断:为什么要编译它?

Java CDI:@Singleton@Startup@Inject无法实现接口

javax.crypto-密码对象-提供者服务是如何工作的?

单例模式中热切初始化和惰性初始化的区别