我在我的项目中配置了一个Checkstyle验证规则,该规则禁止定义具有 3 个以上输入参数的类方法。该规则适用于 我的 课程,但有时我必须扩展不遵守此特定规则的第三方课程。
是否有可能指示 Checkstyle 应该默默地忽略某个方法?
顺便说一句,我最终得到了我自己的 Checkstyle 包装器:qulice.com(请参阅严格控制 Java 代码质量)
在http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter查看 supressionCommentFilter 的使用。您需要将该模块添加到您的 checkstyle.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:
FileContentsHolder
<module name="FileContentsHolder"/>
也可以看看
<module name="SuppressionFilter"> <property name="file" value="docs/suppressions.xml"/> </module>
在SuppressionFilter同一页面上的部分下,它允许您关闭对模式匹配资源的单独检查。
SuppressionFilter
因此,如果您的 checkstyle.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 现在提供的另一种方法是通过@SuppressWarningsjava 注释抑制违规。为此,您需要在配置文件中添加两个新模块 (SuppressWarningsFilter和):SuppressWarningsHolder
@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: