2012-03-28 1 views
7

Ho una coppia di mappe Hadoop e riduco le classi che sovrascrivono i metodi protetti. bandiere Sonar questi con:Come disabilitare SQUID: UnusedProtectedMethod in Sonar per una classe o un metodo?

Unused protected method 
Plugin: squid Key: UnusedProtectedMethod 

So che c'è una correzione in Sonar che risolve questo e che a un certo punto la mia organizzazione userà una versione con quella correzione. Nel frattempo, vorrei disattivare l'avviso. Ho provato:

@SuppressWarnings("UnusedProtectedMethod") 

e

@SuppressWarnings("SQUID.UnusedProtectedMethod") 

inutilmente.

@SuppressWarnings funziona per problemi PMD, @ edu.umd.cs.findbugs.annotations.SuppressWarnings (value = "blah") funziona per problemi di findbugs. Esiste un'altra variante per i problemi di calamari, oppure non è ancora supportata?

risposta

3

Usa

@SuppressWarnings("squid:UnusedProtectedMethod") 

Vedi anche SonarQube Java Plugin FAQ - SuprressWarnings

Questo è stato implementato in Java SonarQube plug-in versione 2.8.

+0

Quindi, è solo un problema di caso? –

+1

Sì, la sintassi è leggermente diversa dagli esempi che hai provato. Inoltre penso che questo non sia stato implementato quando hai posto la domanda nel 2012. –

+1

(a) Sembra che il tuo link sia rotto ... (b) Come ho capito, alcuni controlli di Squid sono a livello di bytecode, dove questa annotazione ha vinto ' t apparire; Sonar è abbastanza intelligente da raccogliere ancora l'annotazione dalla fonte in questi casi? Questo è il motivo per cui FindBugs ha introdotto 'SuppressFBWarnings' con la conservazione del runtime, anche se dubito che' SuppressFBWarnings' funzioni per violazioni non-FindBugs (ad esempio squid). – Kidburla

3

Ho trovato che Squid supporta solo "tutto". Dalla sorgente plugin di calamari, in 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; 
    } 

c'è discussione qui: Support the annotation "@SuppressWarnings" at class and method level

+2

E ciò non funziona in modo affidabile su Sonar 3.4.1. Questo problema di non essere in grado di sopprimere i falsi positivi * nel codice * (anziché tramite la GUI Web di Sonar), ci impedisce di utilizzare calamaro in un ambiente aziendale. –