2012-03-28 15 views
7

Tengo un par de mapas de Hadoop y reduzco las clases que anulan los métodos protegidos. banderas de sonar estos con:¿Cómo puedo desactivar SQUID: UnusedProtectedMethod in Sonar para una clase o método?

Unused protected method 
Plugin: squid Key: UnusedProtectedMethod 

Sé que hay un arreglo de Sonar que se ocupa de esto y que en algún momento de mi organización utilizará una versión con esa solución. Mientras tanto, me gustaría desactivar la advertencia. He intentado:

@SuppressWarnings("UnusedProtectedMethod") 

y

@SuppressWarnings("SQUID.UnusedProtectedMethod") 

en vano.

@SuppressWarnings funciona para problemas de PMD, @ edu.umd.cs.findbugs.annotations.SuppressWarnings (value = "blah") funciona para los problemas de findbugs. ¿Hay alguna otra variante para los problemas de los calamar, o simplemente no es compatible todavía?

Respuesta

3

Uso

@SuppressWarnings("squid:UnusedProtectedMethod") 

Ver también SonarQube Java Plugin FAQ - SuprressWarnings

Esto se ha implementado en el Java sonarqube plugin versión 2.8.

+0

Entonces, ¿es solo una cuestión de caso? –

+1

Sí, la sintaxis es un poco diferente a los ejemplos que probó. También creo que esto no se implementó cuando hiciste la pregunta en 2012. –

+1

(a) Parece que tu enlace está roto ... (b) Según tengo entendido, algunos controles de Squid están en el nivel de bytecode, donde esta anotación ganó ' t aparece; ¿Es Sonar lo suficientemente inteligente como para seguir recogiendo la anotación de la fuente en tales casos? Esta es la razón por la cual FindBugs introdujo 'SuppressFBWarnings' con retención en tiempo de ejecución, aunque dudo que' SuppressFBWarnings' funcione para violaciones que no sean FindBugs (por ejemplo, squid). – Kidburla

3

Descubrí que Squid solo admite "todo". Desde la fuente del plugin calamar, en SuppressWarningsAnnotationUtils.java:

private static final String VALUE = "\"all\""; 
... 


    public static boolean isSuppressAllWarnings(DetailAST ast) { 
    DetailAST suppressWarningsAnnotation = getSuppressWarningsAnnotation(ast); 
    if (suppressWarningsAnnotation != null) { 
     DetailAST warningHolder = findWarningsHolder(suppressWarningsAnnotation); 
     for (DetailAST warning = warningHolder.findFirstToken(TokenTypes.EXPR); warning != null; warning = warning.getNextSibling()) { 
     if (warning.getType() == TokenTypes.EXPR) { 
      DetailAST fChild = warning.getFirstChild(); 
      if (fChild.getType() == TokenTypes.STRING_LITERAL) { 
      String text = warning.getFirstChild().getText(); 
      if (VALUE.equals(text)) { 
       return true; 
      } 
      } 
     } 
     } 
    } 
    return false; 
    } 

de discusión Hay aquí: Support the annotation "@SuppressWarnings" at class and method level

+2

Y esto ni siquiera funciona confiablemente en Sonar 3.4.1. Este problema de no poder suprimir los falsos positivos * en el código * (en lugar de a través de la GUI web de Sonar) nos impide utilizar Squid en un entorno empresarial. –

Cuestiones relacionadas