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


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. Найдите проблему, о которой вы хотите запретить предупреждения. В красном поле проблемы в вашем коде есть ссылка на правило с определением данной проблемы. Как только вы нажмете, что вы увидите идентификатор в верхней части страницы.


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


2
Спасибо за подсказку к ингному предупреждению о нескольких
сонарных кубах

1
Другая проблема с пометкой его как ложного срабатывания на интерфейсе состоит в том, что если по какой-либо причине проект будет удален и добавлен снова, все установленные вами флаги исчезнут.
Annedroiid

@annedroiid - Есть ли способ сделать то же самое в файле pom.xml? Я поднял вопрос здесь: stackoverflow.com/questions/57789832/…
Pra_A

8

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


4

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

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})

1
squidдля базы данных Java Sonar-sourced (SonarAnalyzer Java). pmdи checkstyleнаходятся в других хранилищах правил.
Даниэль С. Собрал,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.