2014-12-29 12 views
21

cerco di ignorare o disabilitare alcuni avvisi inutili in Eclipse di checkstyle con annotazione @SuppressWarnings come How to disable a particular checkstyle rule for a particular line of code?Ignorando gli avvertimenti di Checkstyle con @SuppressWarnings annotazione

ma questo non funziona per me.

Ecco la 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"/> 
    ... 

e qui il codice java:

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

impostare anche il valore di avvertimento per "tutti" @SuppressWarnings("all") o @SuppressWarnings("CyclomaticComplexity"), @SuppressWarnings("cyclomaticcomplexity") è senza alcun risultato.

La documentazione di checkstyle è scadente. Qualche idea?

+0

Stai utilizzando Checkstyle 5.7 o versioni successive? @SuppressWarnings è supportato da 5.7. – satellite779

+0

Ho anche questo problema con Checkstyle 6.0 – Marcin

risposta

37

A. SuppressWarnings Filtro

Con checkstyle 6.5.0 posso usare @SuppressWarnings. Si prega di prendere in considerazione i seguenti punti:

  • Il filtro SuppressWarnings deve essere abilitato nelle impostazioni Checkstyle.
  • Nel tag per l'annotazione SuppressWarnings è necessario utilizzare il nome del modulo checkstyle in in lettere minuscole.
  • Opzionalmente a prefisso "stile di controllo:" può essere utilizzato nel tag.
  • Se l'annotazione non funziona come previsto, provare a cambiare la sua posizione . L'annotazione per il modulo MagicNumber deve essere inserita prima del metodo. Alcune annotazioni devono essere localizzate direttamente dove viene mostrato il problema e altre devono essere posizionate di fronte alla definizione della classe.

Alcuni esempi per il modulo checkstyle "MagicNumber":

Works:

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

.

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

non funziona:

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

.

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

.

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

Ulteriori note

  • ho ricevuto un avvertimento SuppressWarnings non supportati che ho disabilitato nelle preferenze Eclipse con Java => Compiler => Errori/Avvisi => NOTE => non gestita di token in "@SuppressWarnings": Ignora

  • Il nome (come definito nel file xml) del modulo di stile di controllo corrispondente è non visualizzato nel messaggio di violazione che viene visualizzato quando si passa sopra un problema di codice. Ho abilitato l'opzione "include l'id del modulo (se disponibile) nel messaggio di violazione" e modificato manualmente tutti gli ID dei moduli per essere uguali al nome del modulo corrispondente nel file xml, ma in lettere minuscole. Ad esempio c'è un modulo < name = "AnonInnerLength" > che viene visualizzato nelle impostazioni di checkwatch di Eclipse come "Lunghezza interna delle classi anonime". Quel modulo non aveva id di modulo. Ho cambiato il modulo id per checkstyle: anoninnerlength per rendere più facile per i miei colleghi per eliminare l'avviso:

    < nome del modulo = "AnonInnerLength" >
    < nome proprietà = valore "id" = "checkstyle: anoninnerlength "/ >
    <modulo>

  • io uso il prefisso 'checkstyle:' nel modulo id così come nel tag SuppressWarnings per rendere esplicito che l'avvertimento non è un 'avvertimento Eclipse standard'. (Il prefisso opzionale "stile di controllo:" potrebbe essere già utilizzato nel tag senza alterare l'id del modulo.Tuttavia, il prefisso non verrebbe mostrato nel messaggio di violazione. Includerlo nell'ID del modulo rende il messaggio più trasparente e motiva i miei colleghi a includere il prefisso nel tag, anche.)

B. Soppressione commento Filtro

  • il filtro checkstyle Filtri => Soppressione Commento filtro utilizza il nome del modulo come è specificato nel xml file.
  • Se si utilizza il prefisso "checkstyle:", il nome del modulo può essere utilizzato anche in minuscolo.

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 

non funziona:

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

C. Esempio di file 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> 
4

La mia versione è checkstyle 8.1.

Funziona con config Gradle come questo:

build.gradle:

apply plugin: 'checkstyle' 

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

e ignorare numero magico come questo:

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

NOTA: prefisso checkstyle: è facoltativo. Spero che questo possa aiutare qualcuno.

+0

saresti disposto a condividere il tuo file checkstyle.xml? –

+0

@JustinTilson sicuro. vedere il mio succo https://gist.github.com/pengisgood/c2432403a03500cf4ec1826b85a08234 –

+0

Qualcosa deve essere spento nel mio ambiente. Ho copiato le tue configurazioni e le mie soppressioni sono ancora ignorate. Sto usando checkstyle 8.1 e Gradle 4.4.1. All'inizio di ogni errore, vedo: [ant: checkstyle] [ERRORE] ... Non sono sicuro di come si stia giocando la formica o se questo è un problema. Il tuo codice è in un repository accessibile al pubblico ovunque? Posso clonarlo e provare ad eseguirlo? –

Problemi correlati