如何为具有main方法的类提供checkstyle HideUtilityClassConstructor规则



对于具有main方法的类,我想取消"HideUtilityClassConstructor"规则。看起来是这样的:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
  • 由于所有检查样式规则都位于公共库中,因此对于任何使用这些规则的模块来说,这都应该是一个通用的跳过
  • 主类的名称可以不同(跳过应该应用于所有具有公共静态主方法的类(
  • 更改应该位于checkstyle通用xml文件中(而不是在main类中,比如使用@SupressWarnings或comments(

有可能做到吗?

您可以使用SuppressionXpathFilter实现这一点。例如,对于您的代码,您需要将此模块添加到您的配置中(在本例中,禁止显示在filesuppressions.xml中(

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name = "Checker">
<module name="TreeWalker">
<module name="SuppressionXpathFilter">
<property name="file" value="suppressions.xml"/>
<property name="optional" value="false"/>
</module>
<module name="HideUtilityClassConstructor"/>
</module>
</module>

suppressions.xml文件的内容如下。这里有两个抑制,你可以选择其中的任何一个。第二个在我看来更好,因为可能出现的假阳性更少。

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Checkstyle//DTD SuppressionXpathFilter Experimental Configuration 1.2//EN"
"https://checkstyle.org/dtds/suppressions_1_2_xpath_experimental.dtd">
<suppressions>
<!--  Suppress for any classes that contain method named "main"  -->
<suppress-xpath checks="HideUtilityClassConstructor"
query="//CLASS_DEF[//METHOD_DEF[./IDENT[@text='main']]]"/>
<!--  Suppress for any classes that are annotated with "SpringBootApplication"  -->
<suppress-xpath checks="HideUtilityClassConstructor"
query="//CLASS_DEF[//MODIFIERS/ANNOTATION[./IDENT[@text='SpringBootApplication']]]"/>
</suppressions>

最新更新