2014-12-29 3 views
21

ich versuchen, einige nutzlose Warnungen in Eclipse durch check mit Anmerkung zu ignorieren oder @SuppressWarnings wie How to disable a particular checkstyle rule for a particular line of code?Ignorieren von Warnungen Check mit Anmerkung @SuppressWarnings

zu deaktivieren, aber das ist für mich nicht funktionieren.

ist die 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"/> 
    ... 

und hier den Java-Code:

@SuppressWarnings("checkstyle:CyclomaticComplexity") 
public void doSomeThing() { 
... 
} 

auch den Wert der Warnung auf "alle" @SuppressWarnings("all") oder @SuppressWarnings("CyclomaticComplexity"), @SuppressWarnings("cyclomaticcomplexity") ohne Ergebnis.

Die Dokumentation des Checkstyle ist schlecht. Einige Ideen?

+0

Verwenden Sie Checkstyle 5.7 oder höher? @SuppressWarnings wird von 5.7 unterstützt. – satellite779

+0

Ich habe auch dieses Problem mit Checkstyle 6.0 – Marcin

Antwort

37

A. SuppressWarnings Filter

Mit check 6.5.0 I @SuppressWarnings verwenden können. Bitte beachten Sie folgende Punkte:

  • Der SuppressWarnings Filter hat Einstellungen in den Check aktiviert sein.
  • Im Tag für die Annotation SuppressWarnings müssen Sie den Namen des Checkstyle-Moduls in Kleinbuchstaben verwenden.
  • Optional ein Präfix "Checkstyle:" kann im Tag verwendet werden.
  • Wenn die Annotation nicht wie erwartet funktioniert, versuchen Sie, ihre Position zu ändern. Die Annotation für das MagicNumber-Modul muss vor die Methode gestellt werden. Einige Anmerkungen müssen direkt dort liegen, wo das Problem angezeigt wird, und andere müssen sich vor der Klassendefinition befinden.

Einige Beispiele für das Modul Check "Magicnumber":

Works:

@SuppressWarnings("checkstyle:magicnumber") 
public example(){ 
    int g = 5; 
} 

.

@SuppressWarnings("magicnumber") 
public example(){ 
    int g = 5; 
} 

funktioniert nicht:

@SuppressWarnings("MagicNumber") 
public example(){ 
    int g = 5; 
} 

.

@SuppressWarnings("magicNumber") 
public example(){   
    int g = 5; 
} 

.

public example(){ 
    @SuppressWarnings("magicnumber") 
    int g = 5; 
} 

Weitere Hinweise

  • ich eine Warnung nicht unterstützte SuppressWarnings bekam, die ich mit Java => Compiler => Fehler in den Eclipse-Einstellungen deaktiviert/Warnungen => Anmerkungen => Unbehandelte Token in '@SuppressWarnings' ': Ignoriere

  • Der Name (wie in der XML-Datei definiert) des entsprechenden Checkstyle-Moduls ist wird nicht in der Überschreitungsmeldung angezeigt, die angezeigt wird, wenn Sie den Mauszeiger über ein Code-Problem bewegen. Ich habe die Option "include modul id (falls verfügbar) in Verletzung Nachricht" aktiviert und manuell alle Modul-IDs so geändert, dass sie mit dem entsprechenden Modulnamen in der XML-Datei übereinstimmen, jedoch in Kleinbuchstaben. Zum Beispiel gibt es ein Modul < name = "AnonInnerLength" >, das in den Eclipse-Checkstyle-Einstellungen als "Anonyme innere Klassenlänge" angezeigt wird. Dieses Modul hatte keine Modul-ID. Ich änderte das Modul-ID check: anoninnerlength, um es einfacher für meine Kollegen, die Warnung zu unterdrücken:

    < Modul name = "AnonInnerLength" >
    < property name = "id" value = "check: anoninnerlength „/ >
    <Modul>

  • ich benutze das Präfix‚check:‘im Modul-ID sowie in dem SuppressWarnings Tag es explizit zu machen, dass die Warnung nicht eine‚Standard-Eclipse-Warnung‘. (Das optionale Präfix "checkstyle:" könnte bereits im Tag verwendet werden, ohne die Modul-ID zu ändern. Das Präfix würde jedoch nicht in der Verletzungsnachricht angezeigt. Das Einschließen in die Modul-ID macht die Nachricht transparenter und motiviert meine Kollegen dazu umfassen das Präfix in das Tag, zu.)

B. Suppression Filter Comment

  • die Check Filter Filter => Suppression Comment Filter verwendet den Modulnamen, wie sie im XML spezifiziert ist Datei.
  • Wenn Sie das Präfix "checkstyle:" verwenden, kann der Modulname auch in Kleinbuchstaben verwendet werden.

Works:

//CHECKSTYLE:OFF: checkstyle:magicnumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: checkstyle:magicnumber 

.

//CHECKSTYLE:OFF: MagicNumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: MagicNumber 

funktioniert nicht:

//CHECKSTYLE:OFF: magicnumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: magicnumber 

C. Beispiel check 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> 
4

Meine check Version ist 8.1.

Es arbeitet mit gradle Config wie folgt aus:

build.gradle:

apply plugin: 'checkstyle' 

checkstyle { 
    configFile = file('config/checkstyle.xml') 
    toolVersion = '8.1' 
} 

Und ignorieren magische Zahl wie folgt aus:

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

HINWEIS: Präfix checkstyle: optional. Hoffe, das kann jemandem helfen.

+0

würden Sie bereit sein, Ihre checkstyle.xml Datei zu teilen? –

+0

@JustinTilson sicher. siehe mein Gilt https://gist.github.com/pengisgood/c2432403a03500cf4ec1826b85a08234 –

+0

Etwas muss in meiner Umgebung ausgeschaltet sein. Ich habe Ihre Configs wörtlich kopiert und meine Unterdrückungen werden immer noch ignoriert. Ich benutze Checkstyle 8.1 und Gradle 4.4.1. Zu Beginn jedes Fehlers sehe ich: [ant: checkstyle] [ERROR] ... Ich bin mir nicht sicher, wie ant das spielt oder ob das überhaupt ein Problem ist. Ist Ihr Code überall in einem öffentlich zugänglichen Repo verfügbar? Könnte ich es klonen und versuchen, es auszuführen? –

Verwandte Themen