Sonar für bestimmten Code ausschalten

163

Ist es möglich, Sonarmessungen ( www.sonarsource.org ) für bestimmte Codeblöcke zu deaktivieren , die nicht gemessen werden sollen?

Ein Beispiel ist die Warnung "Preserve Stack Trace", die Findbugs ausgibt. Wenn ich den Server verlasse, möchte ich die Nachricht möglicherweise nur an den Client zurückgeben, ohne die tatsächliche Ausnahme, die ich gerade abgefangen habe, wenn diese Ausnahme dem Client unbekannt ist (weil der Client nicht über die JAR verfügt, in der sich diese befindet Ausnahme war zum Beispiel enthalten).

Ameise Kutschera
quelle

Antworten:

70

Dies ist eine FAQ . Sie können //NOSONARdie Leitung aktivieren, die die Warnung auslöst. Ich bevorzuge jedoch die Verwendung des FindBugs-Mechanismus, der darin besteht, die Annotation @SuppressFBWarnings hinzuzufügen:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
JB Nizet
quelle
2
Einverstanden. Ich bin mir jedoch nicht sicher, ob Sonar richtig interpretiert @SuppressFBWarnings(hinzugefügt, um Konflikte zu vermeiden java.lang.SuppressWarnings) und ignoriert es auch.
Marcel Stör
AFAIK, Sonar verwendet FindBugs. Wenn FindBugs diese Anmerkungen verarbeitet, verstehe ich nicht, warum sie beim Ausführen von FindBugs über Sonar nicht funktionieren würden. Sollte sowieso nicht schwer zu testen sein.
JB Nizet
4
Der FAQ-Link ist veraltet. Hier ist die neue FAQ
wiredniko
11
Könnten Sie bitte einen anderen Link zu einer SonarQube-FAQ bereitstellen? Ich sehe ein Anmeldeformular anstelle von FAQ
Win4ster
231

Sie können eine Klasse oder eine Methode mit SuppressWarnings mit Anmerkungen versehen

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

Tintenfisch: S00112 ist in diesem Fall eine Sonar-ID. Sie finden diese ID in der Sonar-Benutzeroberfläche. Gehen Sie zu Issues Drilldown. Suchen Sie ein Problem, bei dem Sie Warnungen unterdrücken möchten. Im roten Problemfeld in Ihrem Code befindet sich ein Regellink mit einer Definition eines bestimmten Problems. Sobald Sie darauf klicken, wird die ID oben auf der Seite angezeigt.

maestr0
quelle
8
Ich kann bestätigen, dass dies auch mit einer bestimmten FindBugs-Regel-ID funktioniert, z @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody
19
Das Problem ist, dass Eclipse eine Warnung anzeigt Unsupported @SuppressWarnings("squid:S00112"). Sie können Eclipse so konfigurieren, dass dies ignoriert wird. Ein Tippfehler wie in @SuppressWarnings("uncheckedd")wird jedoch nicht erkannt.
Ortomala Lokni
1
Unter docs.codescan.io/hc/en-us/articles/… finden Sie Dokumente zu @SuppressWarnings und Sonar.
Rich Dougherty
89

Ich empfehle Ihnen, bestimmte Warnungen mithilfe von zu unterdrücken @SuppressWarnings("squid:S2078").

Um mehrere Warnungen zu unterdrücken, können Sie dies folgendermaßen tun @SuppressWarnings({"squid:S2078", "squid:S2076"})

Es gibt auch den //NOSONARKommentar, der SonarQube anweist, alle Fehler für eine bestimmte Zeile zu ignorieren.

Wenn Sie die richtigen Rechte für die Benutzeroberfläche haben, können Sie direkt von der Benutzeroberfläche aus ein Flag als falsch positiv ausgeben.

Der Grund, warum ich die Unterdrückung bestimmter Warnungen empfehle, ist, dass es besser ist, ein bestimmtes Problem zu blockieren, anstatt //NOSONARein Sonar-Problem zu verwenden und zu riskieren, das sich versehentlich in Ihrem Code einschleicht.

Weitere Informationen hierzu finden Sie in den FAQ

Hinweis: Gábor Bakos verweist auf die älteren FAQ, die jetzt 404s sind. Dies ist das erste Google-Ergebnis für mich, daher möchte ich allen anderen helfen, die möglicherweise die gleiche Frage haben

Bearbeiten: 30.06.16 SonarQube heißt jetzt SonarLint

Falls Sie sich fragen, wie Sie die Tintenfischnummer finden können. Klicken Sie einfach auf die Sonar-Nachricht (z. B. Remove this method to simply inherit it.) und das Sonar-Problem wird erweitert.

Unten links wird die Tintenfischnummer angezeigt (z. squid:S1185B. Wartbarkeit> Verständlichkeit).

Dann können Sie es unterdrücken, indem Sie @SuppressWarnings("squid:S1185")

wiredniko
quelle
2
Vielen Dank für den Hinweis auf Ingnoe mehrere Sonarwürfel Warnungen
AlexWien
1
Das andere Problem beim Markieren als falsch positiv auf der Benutzeroberfläche ist, dass, wenn das Projekt aus irgendeinem Grund gelöscht und erneut hinzugefügt wird, alle von Ihnen gesetzten Flags verschwunden sind.
Annedroiid
@annedroiid - Gibt es eine Möglichkeit, ob dies in der Datei pom.xml möglich ist? Ich habe hier eine Frage gestellt: stackoverflow.com/questions/57789832/…
Pra_A
8

Verwenden Sie // NOSONAR in der Zeile, in der Sie eine Warnung erhalten, wenn Sie Ihrem Code nicht helfen können. Es klappt!

Jain
quelle
4

Ich kann die Tintenfischnummer in Sonar 5.6 nicht finden, mit dieser Anmerkung funktioniert auch:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
quelle
1
squidist für die Sonar-bezogene Java-Datenbank (SonarAnalyzer Java). pmdund checkstylebefinden sich in anderen Regel-Repositorys.
Daniel C. Sobral