是否为特定代码行禁用特定的 Checkstyle 规则?
我在项目中配置了一个Checkstyle验证规则,该规则禁止定义具有3个以上输入参数的类方法。该规则适用于我的类,但有时我必须扩展第三方类,这些类不遵守此特定规则。
有没有可能指示Checkstyle应该默默地忽略某种方法?
顺便说一句,我最终得到了我自己的Checkstyle:qulice.com 包装器(参见Java代码质量的严格控制))
我在项目中配置了一个Checkstyle验证规则,该规则禁止定义具有3个以上输入参数的类方法。该规则适用于我的类,但有时我必须扩展第三方类,这些类不遵守此特定规则。
有没有可能指示Checkstyle应该默默地忽略某种方法?
顺便说一句,我最终得到了我自己的Checkstyle:qulice.com 包装器(参见Java代码质量的严格控制))
查看 supressionCommentFilter 的使用,请访问 http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter。您需要将模块添加到检查样式中.xml
<module name="SuppressionCommentFilter"/>
它是可配置的。因此,您可以向代码中添加注释以关闭 checkstyle(在各个级别),然后通过在代码中使用注释再次打开。例如:
//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON
或者更好的是,使用这个更调整的版本:
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
<property name="checkFormat" value="$1"/>
</module>
它允许您关闭特定代码行的特定检查:
//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions
catch (Exception e)
//CHECKSTYLE.ON: IllegalCatch
*注意:您还必须添加:FileContentsHolder
<module name="FileContentsHolder"/>
另请参见
<module name="SuppressionFilter">
<property name="file" value="docs/suppressions.xml"/>
</module>
在同一页面上的部分下,这允许您关闭对模式匹配资源的单独检查。SuppressionFilter
所以,如果你的检查风格.xml:
<module name="ParameterNumber">
<property name="id" value="maxParameterNumber"/>
<property name="max" value="3"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
您可以使用以下命令在抑制 xml 文件中将其关闭:
<suppress id="maxParameterNumber" files="YourCode.java"/>
现在在Checkstyle 5.7中可用的另一种方法是通过java注释抑制冲突。为此,您需要在配置文件中添加两个新模块( 和 ):@SuppressWarnings
SuppressWarningsFilter
SuppressWarningsHolder
<module name="Checker">
...
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
...
<module name="SuppressWarningsHolder" />
</module>
</module>
然后,在代码中,您可以执行以下操作:
@SuppressWarnings("checkstyle:methodlength")
public void someLongMethod() throws Exception {
或者,对于多个抑制:
@SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"})
public void someLongMethod() throws Exception {
铌:“”前缀是可选的(但建议使用)。根据文档,参数名称必须全部小写,但实践表明任何情况都有效。checkstyle:
如果您更喜欢使用注释来选择性地静音规则,现在可以使用注释,从Checkstyle 5.7开始(并受Checkstyle Maven插件2.12 +支持)。@SuppressWarnings
首先,在 中,将模块添加到 :checkstyle.xml
SuppressWarningsHolder
TreeWalker
<module name="TreeWalker">
<!-- Make the @SuppressWarnings annotations available to Checkstyle -->
<module name="SuppressWarningsHolder" />
</module>
接下来,启用 there(作为同级到):SuppressWarningsFilter
TreeWalker
<!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation -->
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
...
现在,您可以注释例如要从某个Checkstyle规则中排除的方法:
@SuppressWarnings("checkstyle:methodlength")
@Override
public boolean equals(Object obj) {
// very long auto-generated equals() method
}
参数 to 中的前缀是可选的,但我喜欢它作为此警告来源的提醒。规则名称必须为小写。checkstyle:
@SuppressWarnings
最后,如果你使用的是Eclipse,它会抱怨这个论点是未知的:
不支持的@SuppressWarnings(“checkstyle:methodlength”)
如果您愿意,可以在首选项中禁用此 Eclipse 警告:
Preferences:
Java
--> Compiler
--> Errors/Warnings
--> Annotations
--> Unhandled token in '@SuppressWarnings': set to 'Ignore'