una texto ocultar habilitar editable deshabilitar desactivar como campo caja botones activar java checkstyle

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



habilitar y deshabilitar botones en netbeans (6)

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 )


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:

<module name="NoWhitespaceBefore"/>

No puedo usar:

@SuppressWarnings({"nowhitespacebefore"})

Debo, sin embargo, usar:

@SuppressWarnings({"NoWhitespaceBefore"})

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

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

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


Consulte el uso de supressionCommentFilter en http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter . Deberá agregar el módulo a su checkstyle.xml

<module name="SuppressionCommentFilter"/>

y es configurable. Por lo tanto, puede agregar comentarios a su código para desactivar el estilo de control (en varios niveles) y luego volver a encenderlo mediante el uso de comentarios en su código. P.ej

//CHECKSTYLE:OFF public void someMethod(String arg1, String arg2, String arg3, String arg4) { //CHECKSTYLE:ON

O mejor aún, use esta versión más ajustada:

<module name="SuppressionCommentFilter"> <property name="offCommentFormat" value="CHECKSTYLE.OFF/: ([/w/|]+)"/> <property name="onCommentFormat" value="CHECKSTYLE.ON/: ([/w/|]+)"/> <property name="checkFormat" value="$1"/> </module>

que le permite desactivar comprobaciones específicas para líneas de código específicas:

//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions catch (Exception e) //CHECKSTYLE.ON: IllegalCatch

* Nota: también deberá agregar FileContentsHolder :

<module name="FileContentsHolder"/>

Ver también

<module name="SuppressionFilter"> <property name="file" value="docs/suppressions.xml"/> </module>

en la sección SuppressionFilter en la misma página, que le permite desactivar las comprobaciones individuales de los recursos combinados de patrones.

Entonces, si tiene en su checkstyle.xml:

<module name="ParameterNumber"> <property name="id" value="maxParameterNumber"/> <property name="max" value="3"/> <property name="tokens" value="METHOD_DEF"/> </module>

Puede desactivarlo en su archivo xml de supresión con:

<suppress id="maxParameterNumber" files="YourCode.java"/>

Otro método, ahora disponible en Checkstyle 5.7, es suprimir violaciones a través de la anotación java @SuppressWarnings . Para hacer esto, necesitará nuevos módulos (SuppressWarningsFilter y SuppressWarningsHolder) en su archivo de configuración:

<module name="Checker"> ... <module name="SuppressWarningsFilter" /> <module name="TreeWalker"> ... <module name="SuppressWarningsHolder" /> </module> </module>

Luego, dentro de tu código, puedes hacer lo siguiente:

@SuppressWarnings("checkstyle:methodlength") public void someLongMethod() throws Exception {

o, para supresiones múltiples:

@SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"}) public void someLongMethod() throws Exception {

NB: El checkstyle: " checkstyle: " es opcional (pero recomendado) y el nombre del parámetro debe estar en minúsculas .


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):

<module name="SuppressWithNearbyCommentFilter"> <property name="commentFormat" value="CHECKSTYLE IGNORE (/w+) FOR NEXT (/d+) LINES"/> <property name="checkFormat" value="$1"/> <property name="influenceFormat" value="$2"/> </module>

SuppressWithNearbyCommentFilter


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 :

<module name="TreeWalker"> <!-- Make the @SuppressWarnings annotations available to Checkstyle --> <module name="SuppressWarningsHolder" /> </module>

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

<!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation --> <module name="SuppressWarningsFilter" /> <module name="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''


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.


<module name="Checker"> <module name="SuppressionCommentFilter"/> <module name="TreeWalker"> <module name="FileContentsHolder"/> </module> </module>

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:

<module name="SuppressionCommentFilter"> <property name="offCommentFormat" value="BEGIN GENERATED CODE"/> <property name="onCommentFormat" value="END GENERATED CODE"/> </module> //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

http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter