A. 抑制警告过滤器
使用checkstyle 6.5.0,我可以使用.请考虑以下几点:@SuppressWarnings
- 必须在 Checkstyle 设置中启用“抑制警告”过滤器(请参阅下面的示例设置中的“树行者”)。
- 在注释的标记中,您必须使用全小写的 checkstyle 模块的名称。
SuppressWarnings
-
(可选)可以在标记中使用前缀“checkstyle:”。
- 如果批注未按预期工作,请尝试更改其位置。模块的注释需要放在方法之前。某些注释必须直接位于显示问题的位置,而其他注释必须位于类定义的前面。
MagicNumber
检查样式模块的一些示例:MagicNumber
工程:
@SuppressWarnings("checkstyle:magicnumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicnumber")
public example(){
int g = 5;
}
不起作用:
@SuppressWarnings("MagicNumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicNumber")
public example(){
int g = 5;
}
.
public example(){
@SuppressWarnings("magicnumber")
int g = 5;
}
进一步说明
-
我收到一个警告,不支持的抑制警告,我在Eclipse首选项中禁用了Java=>Compiler=>Errors/Warnings=>Annotations=>Unhandled token in @SuppressWarnings: Ignore
-
相应的 checkstyle 模块的名称(如 xml 文件中所定义)不会显示在将鼠标悬停在代码问题上时弹出的冲突消息中。我启用了“在冲突消息中包括模块ID(如果可用)”选项,并手动将所有模块ID更改为与xml文件中的相应模块名称相同,但小写。例如,有一个模块<name=“AnonInnerLength”>它在Eclipse checkstyle设置中显示为“匿名内部类长度”。该模块没有模块 ID。我将模块 ID 更改为,以便我的同事更容易抑制警告:checkstyle:anoninnerlength
<module name=“AnonInnerLength”>
<property name=“id” value=“checkstyle:anoninnerlength”/>
<module>
-
我在模块ID和标签中使用前缀“checkstyle:”来明确表示警告不是“标准Eclipse警告”。(可选前缀“checkstyle:”已经可以在标签中使用,而无需更改模块ID。但是,前缀不会显示在冲突消息中。将其包含在模块ID中使消息更加透明,并激励我的同事在标记中也包含前缀。SuppressWarnings
B. 抑制注释过滤器
- 校验样式筛选器使用在 xml 文件中指定的模块名称。
Filters=>Suppression Comment Filter
- 如果使用前缀“checkstyle:”,则模块名称也可以以小写形式使用。
工程:
//CHECKSTYLE:OFF: checkstyle:magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: checkstyle:magicnumber
.
//CHECKSTYLE:OFF: MagicNumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: MagicNumber
不起作用:
//CHECKSTYLE:OFF: magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: magicnumber
C. 示例检查样式设置.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="SuppressWarningsFilter"/>
<module name="TreeWalker">
<property name="tabWidth" value="4"/>
<module name="FileContentsHolder"/>
<module name="SuppressWarningsHolder"/>
<module name="SuppressWarnings">
<property name="id" value="checkstyle:suppresswarnings"/>
</module>
<module name="SuppressWithNearbyCommentFilter"/>
<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 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>
<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>