使用注释@SuppressWarnings忽略Checkstyle警告

Mar*_*ark 46 java eclipse checkstyle

我试图忽略或CheckStyle的与注释禁用月食一些无用的警告,@SuppressWarnings如何禁用特定的CheckStyle规则特定的代码行?

但这对我不起作用.

这是checkstyle.xml

<module name="Checker">
  <property name="severity" value="warning"/>
  <module name="SuppressWarningsFilter"/>
  <module name="TreeWalker">
    <property name="tabWidth" value="4"/>
    <module name="FileContentsHolder"/>
    <module name="SuppressWarningsHolder"/>
    <module name="CyclomaticComplexity"/>
    ...
Run Code Online (Sandbox Code Playgroud)

这里是java代码:

@SuppressWarnings("checkstyle:CyclomaticComplexity")
public void doSomeThing() {
 ...
}
Run Code Online (Sandbox Code Playgroud)

同时设定警告值设置为"所有" @SuppressWarnings("all")或者@SuppressWarnings("CyclomaticComplexity"),@SuppressWarnings("cyclomaticcomplexity")是没有任何结果.

checkstyle的文档很差.一些想法?

Ste*_*fan 69

A.抑制警告过滤器

使用checkstyle 6.5.0,我可以使用@SuppressWarnings.请考虑以下几点:

  • 必须在Checkstyle设置中启用 SuppressWarnings过滤器.
  • 在SuppressWarnings注释的标记中,您必须使用全部小写的checkstyle模块的名称.
  • 可选一个前缀 "的CheckStyle:"可以在标签中使用.
  • 如果注释不能按预期工作,请尝试更改其位置.需要将MagicNumber模块的注释放在方法之前.某些注释必须直接位于显示问题的位置,而其他注释必须位于类定义的前面.

checkstyle模块"MagicNumber"的一些示例:

Works:

@SuppressWarnings("checkstyle:magicnumber")
public example(){
    int g = 5;
}
Run Code Online (Sandbox Code Playgroud)

.

@SuppressWarnings("magicnumber")
public example(){
    int g = 5;
}
Run Code Online (Sandbox Code Playgroud)

Does not work:

@SuppressWarnings("MagicNumber")
public example(){
    int g = 5;
}
Run Code Online (Sandbox Code Playgroud)

.

@SuppressWarnings("magicNumber")
public example(){        
    int g = 5;
}
Run Code Online (Sandbox Code Playgroud)

.

public example(){
    @SuppressWarnings("magicnumber")
    int g = 5;
}
Run Code Online (Sandbox Code Playgroud)

Further notes

  • I got a warning unsupported suppresswarnings which I disabled in the Eclipse preferences with Java=>Compiler=>Errors/Warnings=>Annotations=>Unhandled token in '@SuppressWarnings'': Ignore

  • The name (as defined in the xml file) of the corresponding checkstyle module is not shown in the violation message that pops up when hovering over a code issue. I enabled the option "include module id (if available) in violation message" and manually altered all module ids to be the same as the corresponding module name in the xml file, but lower case. For example there is a module <name="AnonInnerLength"> which is displayed in the Eclipse checkstyle settings as "Anonymous inner classes length". That module had no module id. I changed the module id to checkstyle:anoninnerlength to make it easier for my colleagues to suppress the warning:

    <module name="AnonInnerLength">
    <property name="id" value="checkstyle:anoninnerlength"/>
    <module>

  • I use the prefix "checkstyle:" in the module id as well as in the SuppressWarnings tag to make it explicit that the warning is not a "standard Eclipse warning". (The optional prefix "checkstyle:" could already be used in the tag without altering the module id. However, the prefix would not be shown in the violation message. Including it in the module id makes the message more transparent and motivates my colleagues to include the prefix in the tag, too.)

B. Suppression Comment Filter

  • The checkstyle filter Filters=>Suppression Comment Filter uses the module name as it is specified in the xml file.
  • 如果使用前缀"checkstyle:",则模块名称也可以小写使用.

作品:

//CHECKSTYLE:OFF: checkstyle:magicnumber        
public example(){
    int g = 5;
}   
//CHECKSTYLE:ON: checkstyle:magicnumber
Run Code Online (Sandbox Code Playgroud)

.

//CHECKSTYLE:OFF: MagicNumber           
public example(){
    int g = 5;
}   
//CHECKSTYLE:ON: MagicNumber
Run Code Online (Sandbox Code Playgroud)

不起作用:

//CHECKSTYLE:OFF: magicnumber           
public example(){
    int g = 5;
}   
//CHECKSTYLE:ON: magicnumber
Run Code Online (Sandbox Code Playgroud)

C.示例checkstyle settings.xml文件:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">


<!--
    Checkstyle-Configuration with module ids that can be used as    
    tags in @SuppressWarnings
-->

<module name="Checker">

  <property name="severity" value="warning"/>

  <module name="TreeWalker">
    <property name="tabWidth" value="4"/>
    <module name="FileContentsHolder"/>
    <module name="SuppressWarningsHolder"/>

    <module name="JavadocMethod">
      <property name="id" value="checkstyle:javadocmethod"/>   
      <property name="severity" value="ignore"/>
      <property name="allowMissingParamTags" value="true"/>
      <property name="allowMissingThrowsTags" value="true"/>
      <property name="allowMissingReturnTag" value="true"/>
      <property name="suppressLoadErrors" value="true"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="JavadocType">
      <property name="id" value="checkstyle:javadoctype"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="JavadocVariable">
      <property name="id" value="checkstyle:javadocvariable"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="JavadocStyle">
      <property name="id" value="checkstyle:javadocstyle"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="ConstantName">
      <property name="id" value="checkstyle:constantname"/>
    </module>

    <module name="LocalFinalVariableName">
      <property name="id" value="checkstyle:localfinalvariablename"/>
    </module>

    <module name="LocalVariableName">
      <property name="id" value="checkstyle:localvariablename"/>
    </module>

    <module name="MemberName">
      <property name="id" value="checkstyle:membername"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="MethodName">
      <property name="id" value="checkstyle:methodname"/>
    </module>

    <module name="PackageName">
      <property name="id" value="checkstyle:packagename"/>
    </module>

    <module name="ParameterName">
      <property name="id" value="checkstyle:parametername"/>
    </module>

    <module name="StaticVariableName">
      <property name="id" value="checkstyle:staticvariablename"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="TypeName">
      <property name="id" value="checkstyle:typename"/>
    </module>

    <module name="AvoidStarImport">
      <property name="id" value="checkstyle:avoidstarimport"/>
    </module>

    <module name="IllegalImport">
      <property name="id" value="checkstyle:illegalimport"/>
    </module>

    <module name="RedundantImport">
      <property name="id" value="checkstyle:redundantimport"/>
    </module>

    <module name="UnusedImports">
      <property name="id" value="checkstyle:unusedimports"/>
    </module>

    <module name="ParameterNumber">
      <property name="id" value="checkstyle:parameternumber"/>
    </module>

    <module name="EmptyForIteratorPad">
      <property name="id" value="checkstyle:emptyforiteratorpad"/>
    </module>

    <module name="MethodParamPad">
      <property name="id" value="checkstyle:methodparampad"/>
    </module>

    <module name="NoWhitespaceAfter">
      <property name="id" value="checkstyle:nowhitespaceafter"/>
      <property name="tokens" value="BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/>
    </module>

    <module name="NoWhitespaceBefore">
      <property name="id" value="checkstyle:nowhitespacebefore"/>
    </module>

    <module name="OperatorWrap">
      <property name="id" value="checkstyle:operatorwrap"/>
      <property name="option" value="eol"/>
    </module>

    <module name="ParenPad">
      <property name="id" value="checkstyle:parenpad"/>
    </module>

    <module name="TypecastParenPad">
      <property name="id" value="checkstyle:typecastparenpad"/>
    </module>

    <module name="WhitespaceAfter">
      <property name="id" value="checkstyle:whitespaceafter"/>
    </module>

    <module name="WhitespaceAround">
      <property name="id" value="checkstyle:whitespacearound"/>
    </module>

    <module name="ModifierOrder">
      <property name="id" value="checkstyle:modifierorder"/>
    </module>

    <module name="RedundantModifier">
      <property name="id" value="checkstyle:redundantmodifier"/>
    </module>

    <module name="LeftCurly">
      <property name="id" value="checkstyle:leftcurly"/>
    </module>

    <module name="NeedBraces">
      <property name="id" value="checkstyle:needbraces"/>
    </module>

    <module name="RightCurly">
      <property name="id" value="checkstyle:rightcurly"/>
    </module>

    <module name="AvoidInlineConditionals">
      <property name="id" value="checkstyle:avoidinlineconditionals"/>
    </module>

    <module name="EmptyStatement">
      <property name="id" value="checkstyle:emptystatement"/>
    </module>

    <module name="HiddenField">
      <property name="id" value="checkstyle:hiddenfield"/>
      <property name="tokens" value="VARIABLE_DEF"/>
    </module>

    <module name="IllegalInstantiation">
      <property name="id" value="checkstyle:illegalinstantiation"/>
    </module>

    <module name="InnerAssignment">
      <property name="id" value="checkstyle:innerassignment"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="MagicNumber">
      <property name="id" value="checkstyle:magicnumber"/>
    </module>

    <module name="MissingSwitchDefault">
      <property name="id" value="checkstyle:missingswitchdefault"/>
    </module>

    <module name="RedundantThrows">
      <property name="id" value="checkstyle:redundantthrows"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="SimplifyBooleanExpression">
      <property name="id" value="checkstyle:simplifybooleanexpression"/>
    </module>

    <module name="SimplifyBooleanReturn">
      <property name="id" value="checkstyle:simplifybooleanreturn"/>
    </module>

    <module name="DesignForExtension">
      <property name="id" value="checkstyle:designforextension"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="FinalClass">
      <property name="id" value="checkstyle:finalclass"/>
    </module>

    <module name="HideUtilityClassConstructor">
      <property name="id" value="checkstyle:hideutilityclassconstructor"/>
    </module>

    <module name="VisibilityModifier">
      <property name="id" value="checkstyle:visibilitymodifier"/>
    </module>

    <module name="ArrayTypeStyle">
      <property name="id" value="checkstyle:arraytypestyle"/>
    </module>

    <module name="UpperEll">
      <property name="id" value="checkstyle:upperell"/>
    </module>

    <module name="AnnotationUseStyle">
      <property name="id" value="checkstyle:annotationusestyle"/>
    </module>

    <module name="MissingDeprecated">
      <property name="id" value="checkstyle:missingdeprecated"/>
    </module>

    <module name="MissingOverride">
      <property name="id" value="checkstyle:missingoverride"/>
    </module>

    <module name="PackageAnnotation">
      <property name="id" value="checkstyle:packageannotation"/>
    </module>

    <module name="AbstractClassName">
      <property name="id" value="checkstyle:abstractclassname"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="AnonInnerLength">
      <property name="id" value="checkstyle:anoninnerlength"/>     
    </module>

    <module name="ExecutableStatementCount">
      <property name="id" value="checkstyle:executablestatementcount"/>
      <property name="max" value="20"/>
      <property name="tokens" value="INSTANCE_INIT,STATIC_INIT,METHOD_DEF,CTOR_DEF"/>
    </module>

    <module name="LineLength">
      <property name="id" value="checkstyle:linelength"/>
      <property name="max" value="120"/>
      <property name="tabWidth" value="4"/>
    </module>

    <module name="MethodLength">
      <property name="id" value="checkstyle:methodlength"/>
      <property name="severity" value="ignore"/>
      <property name="max" value="20"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="OuterTypeNumber">
      <property name="id" value="checkstyle:outertypenumber"/>
    </module>

    <module name="RegexpSinglelineJava">
      <property name="id" value="checkstyle:regexpsinglelinejava"/>
      <property name="format" value="^.*System.out.println.*$"/>
      <property name="ignoreComments" value="true"/>
    </module>

    <module name="AvoidNestedBlocks">
      <property name="id" value="checkstyle:avoidnestedblocks"/>
      <property name="allowInSwitchCase" value="true"/>
    </module>

    <module name="CovariantEquals">
      <property name="id" value="checkstyle:covariantequals"/>
    </module>

    <module name="DefaultComesLast">
      <property name="id" value="checkstyle:defaultcomeslast"/>
    </module>

    <module name="DeclarationOrder">
      <property name="id" value="checkstyle:declarationorder"/>
    </module>

    <module name="EqualsHashCode">
      <property name="id" value="checkstyle:equalshashcode"/>
    </module>

    <module name="ExplicitInitialization">
      <property name="id" value="checkstyle:explicitinitialization"/>
    </module>

    <module name="FallThrough">
      <property name="id" value="checkstyle:fallthrough"/>
    </module>

    <module name="IllegalCatch">
      <property name="id" value="checkstyle:illegalcatch"/>
    </module>

    <module name="IllegalThrows">
      <property name="id" value="checkstyle:illegalthrows"/>
    </module>

    <module name="MissingCtor">
      <property name="id" value="checkstyle:missingctor"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="ModifiedControlVariable">
      <property name="id" value="checkstyle:modifiedcontrolvariable"/>
    </module>

    <module name="MultipleStringLiterals">
      <property name="id" value="checkstyle:multiplestringliterals"/>
       <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="MultipleVariableDeclarations">
      <property name="id" value="checkstyle:multiplevariabledeclarations"/>
    </module>

    <module name="NestedForDepth">
      <property name="id" value="checkstyle:nestedfordepth"/>
      <property name="max" value="2"/>
    </module>

    <module name="NestedIfDepth">
      <property name="id" value="checkstyle:nestedifdepth"/>
      <property name="max" value="2"/>
    </module>

    <module name="NestedTryDepth">
      <property name="id" value="checkstyle:nestedtrydepth"/>
    </module>

    <module name="NoClone">
      <property name="id" value="checkstyle:noclone"/>
    </module>

    <module name="NoFinalizer">
      <property name="id" value="checkstyle:nofinalizer"/>
    </module>

    <module name="ParameterAssignment">
      <property name="id" value="checkstyle:parameterassignment"/>
    </module>

    <module name="StringLiteralEquality">
      <property name="id" value="checkstyle:stringliteralequality"/>
    </module>

    <module name="OneStatementPerLine">
      <property name="id" value="checkstyle:onestatementperline"/>
    </module>

    <module name="InnerTypeLast">
      <property name="id" value="checkstyle:innertypelast"/>
    </module>

    <module name="InterfaceIsType">
      <property name="id" value="checkstyle:interfaceistype"/>
    </module>

    <module name="MutableException">
      <property name="id" value="checkstyle:mutableexception"/>
    </module>

    <module name="BooleanExpressionComplexity">
      <property name="id" value="checkstyle:booleanexpressioncomplexity"/>
    </module>

    <module name="ClassFanOutComplexity">
      <property name="id" value="checkstyle:classfanoutcomplexity"/>
      <property name="max" value="10"/>
    </module>

    <module name="JavaNCSS">
      <property name="id" value="checkstyle:gavancss"/>
      <property name="methodMaximum" value="20"/>
    </module>

    <module name="NPathComplexity">
      <property name="id" value="checkstyle:npathcomplexity"/>
      <property name="max" value="1200"/>
    </module>

    <module name="TrailingComment">
      <property name="id" value="checkstyle:trailingcomment"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="UncommentedMain">
      <property name="id" value="checkstyle:uncommentedmain"/>
    </module>

    <module name="CyclomaticComplexity">
      <property name="id" value="checkstyle:cyclomaticcomplexity"/>
      <property name="max" value="7"/>
    </module>

    <module name="StrictDuplicateCode">
      <property name="id" value="checkstyle:strictduplicatecode"/>
      <property name="severity" value="ignore"/>
      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
    </module>

    <module name="SuppressWarnings">
      <property name="id" value="checkstyle:suppresswarnings"/>
    </module>

  </module>



  <module name="JavadocPackage">
    <property name="id" value="checkstyle:javadocpackage"/>
    <property name="severity" value="ignore"/>
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
  </module>

  <module name="Translation">
      <property name="id" value="checkstyle:translation"/>
  </module>

  <module name="FileLength">
    <property name="id" value="checkstyle:filelength"/>   
    <property name="max" value="1000"/>
  </module>

  <module name="NewlineAtEndOfFile"> 
    <property name="id" value="checkstyle:newlineatendoffile"/>   
    <property name="fileExtensions" value="*.java"/>
  </module>

  <module name="SuppressWithNearbyCommentFilter"/>

  <module name="SuppressWarningsFilter"/>

  <module name="SuppressionCommentFilter">
    <metadata name="net.sf.eclipsecs.core.comment" value="Single warning"/>
    <property name="offCommentFormat" value="CHECKSTYLE\:OFF\: ([\w\|]+)"/>
    <property name="onCommentFormat" value="CHECKSTYLE\:ON\: ([\w\|]+)"/>
    <property name="checkFormat" value="$1"/>
  </module>

</module>
Run Code Online (Sandbox Code Playgroud)

  • 据我了解,仅当我在TreeWalker中添加&lt;module name =“ SuppressWarningsHolder” /&gt;后,SuppressWarnings注释才起作用。不确定是否需要,但我还在TreeWalker之外添加了&lt;module name =“ SuppressWarningsFilter” /&gt;。 (6认同)

Max*_*eng 9

我的checkstyle版本是8.1.

它适用于gradle配置,如下所示:

build.gradle:

apply plugin: 'checkstyle'

checkstyle {
    configFile = file('config/checkstyle.xml')
    toolVersion = '8.1'
}
Run Code Online (Sandbox Code Playgroud)

并忽略这样的幻数:

@SuppressWarnings("checkstyle:MagicNumber")
private String f(String a) {
    String b = a.substring(0, 7);
    String c = a.substring(a.length() - 3);
    return b + "-" + c;
}
Run Code Online (Sandbox Code Playgroud)

注意:前缀checkstyle:是可选的.希望这可以帮助别人.


ssc*_*eck 9

只是为了强调Caio Faustino的评论,该评论至少在checkstyle 8.19上解决了该问题。

  1. 添加<module name="SuppressWarningsHolder"/>Treewalker元素。
  2. 添加<module name="SuppressWarningsFilter"/>为常规模块。
<module name="Checker">
  <--! ... -->
  <module name="TreeWalker">
    <--! ... -->
    <module name="SuppressWarningsHolder"/>
  </module>
  <module name="SuppressWarningsFilter"/>
</module>
Run Code Online (Sandbox Code Playgroud)