Desactivar Sonar para cierto código


164

¿Es posible desactivar las mediciones de sonar ( www.sonarsource.org ) para bloques específicos de código, cuál no quiere ser medido?

Un ejemplo es la advertencia "Preserve Stack Trace" que produce Findbugs. Al abandonar el servidor, es posible que desee pasar el mensaje al cliente, sin incluir la excepción real que acabo de detectar, si esa excepción es desconocida para el cliente (porque el cliente no tiene el JAR en el que la excepción estaba contenida por ejemplo).

Respuestas:


70

Esta es una pregunta frecuente . Puede poner //NOSONARen la línea que activa la advertencia. Sin embargo, prefiero usar el mecanismo FindBugs, que consiste en agregar la anotación @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")

2
Convenido. Sin embargo, no estoy seguro de si Sonar interpreta correctamente @SuppressFBWarnings(agregado para evitar conflictos con java.lang.SuppressWarnings) y también lo ignora.
Marcel Stör

AFAIK, Sonar usa FindBugs. Entonces, si FindBugs maneja estas anotaciones, no veo por qué no funcionarían al ejecutar FindBugs a través de Sonar. No debería ser difícil de probar de todos modos.
JB Nizet

44
El enlace de preguntas frecuentes no está actualizado. Aquí están las nuevas preguntas frecuentes
wiredniko

11
¿Podría proporcionar otro enlace a las preguntas frecuentes de SonarQube? Veo un formulario de inicio de sesión en lugar de preguntas frecuentes
Win4ster

233

Puede anotar una clase o un método con SuppressWarnings

@java.lang.SuppressWarnings("squid:S00112")

calamar: S00112 en este caso es un ID de problema de sonda. Puede encontrar esta ID en la interfaz de usuario de Sonar. Vaya a Desglose de problemas. Encuentre un problema en el que desee suprimir las advertencias. En el cuadro de problema rojo en su código hay un enlace de Regla con una definición de un problema dado. Una vez que haga clic en eso, verá la ID en la parte superior de la página.


8
Puedo confirmar que esto también funciona con una ID de regla específica de FindBugs, por ejemplo @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody

19
El problema es que Eclipse muestra una advertencia Unsupported @SuppressWarnings("squid:S00112"). Puede configurar Eclipse para ignorar esto, pero @SuppressWarnings("uncheckedd")no se detectará un error tipográfico como in .
Ortomala Lokni

1
Ver docs.codescan.io/hc/en-us/articles/… para documentos en @SuppressWarnings y Sonar.
Rich Dougherty

89

Le recomiendo que intente suprimir advertencias específicas mediante el uso @SuppressWarnings("squid:S2078").

Para suprimir múltiples advertencias, puede hacerlo así @SuppressWarnings({"squid:S2078", "squid:S2076"})

También está el //NOSONARcomentario que le dice a SonarQube que ignore todos los errores de una línea específica.

Finalmente, si tiene los derechos adecuados para la interfaz de usuario, puede emitir un indicador como falso positivo directamente desde la interfaz.

La razón por la que recomiendo la supresión de advertencias específicas es que es una mejor práctica bloquear un problema específico en lugar de usar //NOSONARy arriesgarse a que un problema de Sonar se deslice en su código por accidente.

Puede leer más sobre esto en las preguntas frecuentes

Nota: Gábor Bakos está apuntando a las preguntas frecuentes más antiguas que ahora son 404. Este es el primer resultado de Google para mí, así que quiero ayudar a cualquier otra persona que tenga la misma pregunta.

Editar: 30/06/16 SonarQube ahora se llama SonarLint

En caso de que se pregunte cómo encontrar el número de calamar. Simplemente haga clic en el mensaje de la sonda (ej. Remove this method to simply inherit it.) Y el problema de la sonda se expandirá.

En la parte inferior izquierda tendrá el número de calamar (ej. squid:S1185Mantenibilidad> Comprensibilidad)

Entonces puedes suprimirlo @SuppressWarnings("squid:S1185")


2
Gracias por la sugerencia de ignorar múltiples advertencias de cubos de sonar
AlexWien

1
El otro problema al marcarlo como falso positivo en la interfaz es que, por cualquier motivo, el proyecto se elimina y se agrega nuevamente, todos los indicadores que haya configurado desaparecerán.
annedroiid

@annedroiid: ¿hay alguna forma de que se pueda hacer lo mismo en el archivo pom.xml? He planteado una pregunta aquí: stackoverflow.com/questions/57789832/…
Pra_A

8

Use // NOSONAR en la línea que recibe la advertencia si es algo con lo que no puede ayudar a su código. ¡Funciona!


4

No puedo encontrar el número de calamar en la sonda 5.6, con esta anotación también funciona:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})

1
squides para la base de datos Java de origen Sonar (SonarAnalyzer Java). pmdy checkstyleestán en otros repositorios de reglas.
Daniel C. Sobral
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.