Desativando o Sonar para determinado código

164

É possível desativar as medidas do sonar ( www.sonarsource.org ) para blocos específicos de código, que não se deseja medir?

Um exemplo é o aviso "Preservar rastreamento de pilha", emitido pelo Findbugs. Ao sair do servidor, talvez eu queira apenas passar a mensagem de volta para o cliente, sem incluir a exceção real que acabei de capturar, se essa exceção for desconhecida para o cliente (porque o cliente não possui o JAR no qual esse exceção foi contida, por exemplo).

Formiga Kutschera
fonte

Respostas:

70

Este é um FAQ . Você pode colocar //NOSONARna linha disparando o aviso. No entanto, prefiro usar o mecanismo FindBugs, que consiste em adicionar a anotação @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
JB Nizet
fonte
2
Acordado. No entanto, não tenho certeza se o Sonar interpreta corretamente @SuppressFBWarnings(adicionado para evitar conflitos java.lang.SuppressWarnings) e também o ignora.
Marcel Stör
AFAIK, o Sonar usa FindBugs. Portanto, se o FindBugs manipula essas anotações, não vejo por que elas não funcionariam ao executar o FindBugs através do Sonar. De qualquer maneira, não deve ser difícil de testar.
JB Nizet 17/07/2013
4
O link da FAQ está desatualizado. Aqui está o novo FAQ
wiredniko
11
Você poderia fornecer outro link para as Perguntas frequentes do SonarQube? Vejo um formulário de login em vez de FAQ
Win4ster
233

Você pode anotar uma classe ou um método com SuppressWarnings

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

squid: S00112 , neste caso, é um ID de problema do sonar. Você pode encontrar esse ID na interface do usuário do Sonar. Vá para o detalhamento de problemas. Encontre um problema no qual deseja suprimir avisos. Na caixa vermelha do problema no seu código, há um link de regra com a definição de um determinado problema. Depois de clicar, você verá o ID na parte superior da página.

maestr0
fonte
8
Posso confirmar que isso também funciona com um ID de regra específico de FindBugs, por exemplo @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody
19
O problema é que o Eclipse exibe um aviso Unsupported @SuppressWarnings("squid:S00112"). Você pode configurar o Eclipse para ignorar isso, mas um erro de digitação como em @SuppressWarnings("uncheckedd")não será detectado.
Ortomala Lokni
1
Consulte docs.codescan.io/hc/en-us/articles/… para obter documentos sobre @SuppressWarnings e Sonar.
Rich Dougherty
89

Eu recomendo que você tente suprimir avisos específicos usando @SuppressWarnings("squid:S2078").

Para suprimir vários avisos, você pode fazê-lo assim @SuppressWarnings({"squid:S2078", "squid:S2076"})

Há também o //NOSONARcomentário que diz ao SonarQube para ignorar todos os erros de uma linha específica.

Por fim, se você tiver os direitos adequados para a interface do usuário, poderá emitir um sinalizador como falso positivo diretamente da interface.

A razão pela qual recomendo a supressão de avisos específicos é que é uma prática recomendada bloquear um problema específico em vez de usar //NOSONARe arriscar um problema do Sonar que rasteja no seu código por acidente.

Você pode ler mais sobre isso nas Perguntas frequentes

Nota: Gábor Bakos está apontando para as Perguntas mais antigas mais antigas que agora são 404. Este é o primeiro resultado do Google para mim. Quero ajudar mais alguém que possa ter a mesma pergunta.

Edit: 30/06/16 O SonarQube agora se chama SonarLint

Caso você esteja se perguntando como encontrar o número da lula. Basta clicar na mensagem do Sonar (ex. Remove this method to simply inherit it.) E o problema do Sonar será expandido.

No canto inferior esquerdo, o número da lula (ex. squid:S1185Manutenção> Compreensibilidade)

Então você pode suprimi-lo @SuppressWarnings("squid:S1185")

wiredniko
fonte
2
Obrigado pela dica para ingnoe vários avisos sonar cubo
AlexWien
1
O outro problema em marcá-lo como um falso positivo na interface é que, por qualquer motivo, o projeto for excluído e adicionado novamente, todos os sinalizadores que você definiu desaparecerão.
Annedroiid
@annedroiid - Existe alguma maneira se o mesmo puder ser feito no arquivo pom.xml? Eu levantei a pergunta aqui: stackoverflow.com/questions/57789832/…
Pra_A 04/04/19
8

Use // NOSONAR na linha em que você recebe um aviso se é algo que você não pode ajudar no seu código. Funciona!

Jain
fonte
4

Não consigo encontrar o número do squid no sonar 5.6, com esta anotação também funciona:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
fonte
1
squidé para o banco de dados Java fornecido pelo Sonar (SonarAnalyzer Java). pmde checkstyleestão em outros repositórios de regras.
Daniel C. Sobral