Отключение сонара для определенного кода

164

Можно ли отключить измерения гидролокатора ( www.sonarsource.org ) для определенных блоков кода, которые не нужно измерять?

Примером является предупреждение «Сохранить трассировку стека», которое выводит Findbugs. Покидая сервер, я вполне мог бы хотеть передать сообщение обратно клиенту, не считая фактическое исключение, которое я только что перехватил, если это исключение неизвестно клиенту (потому что у клиента нет JAR, в котором это исключение содержалось например).

Муравей Кучера
источник

Ответы:

71

Это часто задаваемые вопросы . Вы можете поставить //NOSONARна линию срабатывания предупреждения. Я предпочитаю использовать механизм FindBugs, который заключается в добавлении аннотации @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
Дж. Б. Низет
источник
2
Согласовано. Тем не менее, я не уверен, правильно ли интерпретирует Sonar @SuppressFBWarnings(добавлено, чтобы избежать конфликтов java.lang.SuppressWarnings), а также игнорирует его.
Марсель Стёр
AFAIK, Sonar использует FindBugs. Поэтому, если FindBugs обрабатывает эти аннотации, я не понимаю, почему они не будут работать при запуске FindBugs через Sonar. В любом случае не должно быть сложно проверить.
JB Низет
4
Ссылка на FAQ устарела. Вот новый FAQ
wiredniko
11
Не могли бы вы предоставить другую ссылку на FAQ по SonarQube? Я вижу форму входа вместо FAQ
Win4ster
235

Вы можете аннотировать класс или метод с SuppressWarnings

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

squid: S00112 в данном случае является идентификатором проблемы сонара. Вы можете найти этот идентификатор в пользовательском интерфейсе сонара. Перейти к выпускам Drilldown. Найдите проблему, о которой вы хотите запретить предупреждения. В красном поле проблемы в вашем коде есть ссылка на правило с определением данной проблемы. Как только вы нажмете, что вы увидите идентификатор в верхней части страницы.

maestr0
источник
8
Я могу подтвердить, что это также работает с определенным идентификатором правила FindBugs, например @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
до
19
Проблема в том, что Eclipse отображает предупреждение Unsupported @SuppressWarnings("squid:S00112"). Вы можете настроить Eclipse на игнорирование этого, но тогда опечатка, такая как in @SuppressWarnings("uncheckedd"), не будет обнаружена.
Ортомала Локни
1
См. Docs.codescan.io/hc/en-us/articles/… для получения документации по @SuppressWarnings и Sonar.
Рич Догерти
89

Я рекомендую вам попытаться подавить определенные предупреждения с помощью @SuppressWarnings("squid:S2078").

Для подавления нескольких предупреждений вы можете сделать это следующим образом @SuppressWarnings({"squid:S2078", "squid:S2076"})

Существует также //NOSONARкомментарий, который говорит SonarQube игнорировать все ошибки для конкретной строки.

Наконец, если у вас есть соответствующие права для пользовательского интерфейса, вы можете выдать флаг как ложное срабатывание непосредственно из интерфейса.

Причина, по которой я рекомендую скрыть определенные предупреждения, состоит в том, что лучше блокировать конкретную проблему, а не использовать //NOSONARи рисковать ошибкой сонара, возникающей в вашем коде случайно.

Вы можете прочитать больше об этом в FAQ

Примечание: Габор Бакос указывает на старый FAQ, который сейчас 404. Это первый результат Google для меня, поэтому я хочу помочь кому-то еще, кто может иметь тот же вопрос

Редактировать: 30.06.16 SonarQube теперь называется SonarLint

Если вам интересно, как найти номер кальмара. Просто нажмите на сообщение Sonar (ex. Remove this method to simply inherit it.), И проблема Sonar расширится.

В левом нижнем углу он будет иметь номер кальмара (например, squid:S1185ремонтопригодность> Понятность)

Так что вы можете подавить его @SuppressWarnings("squid:S1185")

wiredniko
источник
2
Спасибо за подсказку к ингному предупреждению о нескольких
сонарных кубах
1
Другая проблема с пометкой его как ложного срабатывания на интерфейсе состоит в том, что если по какой-либо причине проект будет удален и добавлен снова, все установленные вами флаги исчезнут.
Annedroiid
@annedroiid - Есть ли способ сделать то же самое в файле pom.xml? Я поднял вопрос здесь: stackoverflow.com/questions/57789832/…
Pra_A
8

Используйте // NOSONAR в строке, где вы получаете предупреждение, если это то, с чем вы не можете помочь своему коду. Оно работает!

Jain
источник
4

Я не смог найти номер кальмара в сонар 5.6, с этой аннотацией также работает:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
источник
1
squidдля базы данных Java Sonar-sourced (SonarAnalyzer Java). pmdи checkstyleнаходятся в других хранилищах правил.
Даниэль С. Собрал,