¿Cómo deshabilitar una regla de estilo de control particular para una línea de código particular?

Tengo una regla de validación de checkstyle configurada en mi proyecto, que prohíbe definir métodos de clase con más de 3 parámetros de entrada. La regla funciona bien para mis clases, pero a veces tengo que extender clases de terceros, que no obedecen esta regla en particular.

¿Existe la posibilidad de indicar el “estilo de control” que un método determinado debe ignorarse silenciosamente?

Por cierto, terminé con mi propio envoltorio de checkstyle: qulice.com (ver Control estricto de la calidad del código Java )

Si prefiere usar anotaciones para silenciar reglas de manera selectiva, ahora es posible usar la anotación @SuppressWarnings , comenzando con Checkstyle 5.7 (y compatible con Checkstyle Maven Plugin 2.12+).

Primero, en su checkstyle.xml , agregue el módulo SuppressWarningsHolder al TreeWalker :

     

Luego, habilite SuppressWarningsFilter allí (como un hermano de TreeWalker ):

    ... 

Ahora puede anotar, por ejemplo, el método que desea excluir de una determinada regla Checkstyle:

 @SuppressWarnings("checkstyle:methodlength") @Override public boolean equals(Object obj) { // very long auto-generated equals() method } 

El estilo de checkstyle: prefijo en el argumento de @SuppressWarnings es opcional, pero me gusta como un recordatorio de dónde vino esta advertencia. El nombre de la regla debe ser minúscula.

Por último, si está utilizando Eclipse, se quejará de que el argumento sea desconocido para él:

Unsupported @SuppressWarnings (“checkstyle: methodlength”)

Puede desactivar esta advertencia de Eclipse en las preferencias si lo desea:

 Preferences: Java --> Compiler --> Errors/Warnings --> Annotations --> Unhandled token in '@SuppressWarnings': set to 'Ignore' 

Lo que también funciona bien es SuppressWithNearbyCommentFilter, que utiliza comentarios individuales para suprimir eventos de auditoría.

Por ejemplo

 // CHECKSTYLE IGNORE check FOR NEXT 1 LINES public void onClick(View view) { ... } 

Para configurar un filtro de modo que CHECKSTYLE IGNORE marque PARA SIGUIENTE var LINES evita activar cualquier auditoría para la verificación dada para la línea actual y las siguientes líneas (para un total de var + 1 línea):

      

http://checkstyle.sourceforge.net/config.html

A cada respuesta que se refiere a SuppressWarningsFilter le falta un detalle importante. Solo puede usar la Id. En minúsculas si está definida como tal en su checkstyle-config.xml. Si no, debes usar el nombre del módulo original.

Por ejemplo, si en mi checkstyle-config.xml tengo:

  

No puedo usar:

 @SuppressWarnings({"nowhitespacebefore"}) 

Debo, sin embargo, usar:

 @SuppressWarnings({"NoWhitespaceBefore"}) 

Para que la primera syntax funcione, checkstyle-config.xml debe tener:

    

Esto es lo que funcionó para mí, al menos en la versión 6.17 de CheckStyle.

Tuve dificultades con las respuestas anteriores, posiblemente porque configuré las advertencias checkStyle como errores. Lo que funcionó fue SuppressionFilter: http://checkstyle.sourceforge.net/config_filters.html#SuppressionFilter

El inconveniente de esto es que el rango de línea se almacena en un archivo suppresssions.xml por separado, por lo que un desarrollador desconocido puede no hacer la conexión de inmediato.

       

Para configurar un filtro para suprimir eventos de auditoría entre un comentario que contenga la línea BEGIN GENERATED CODE y un comentario que contenga la línea END CODIGO GENERADO:

     //BEGIN GENERATED CODE @Override public boolean equals(Object obj) { ... } // No violation events will be reported @Override public int hashCode() { ... } // No violation events will be reported //END GENERATED CODE 

Ver más