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

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

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.


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


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!


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"})

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.