2012-06-10 8 views
85

Ist es möglich, Sonarmessungen (www.sonarsource.org) für bestimmte Codeblöcke auszuschalten, die nicht gemessen werden sollen?Sonar für bestimmten Code ausschalten

Ein Beispiel ist die "Preserve Stack Trace" Warnung, die Findbugs ausgibt. Wenn ich den Server verliere, möchte ich vielleicht die Nachricht nur an den Client zurückgeben, ohne die eigentliche Ausnahme, die ich gerade erwischt habe, wenn diese Ausnahme dem Client unbekannt ist (weil der Client nicht über die JAR verfügt, in der dies der Fall ist) Ausnahme war zum Beispiel enthalten).

Antwort

48

Dies ist ein FAQ. Sie können //NOSONAR auf die Linie setzen, die die Warnung auslöst. Ich ziehe es allerdings den FindBugs Mechanismus, der die @SuppressFBWarnings Annotation in das Hinzufügen besteht:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE", 
    justification = "Why you choose to ignore it") 
+1

Einverstanden.Ich bin mir jedoch nicht sicher, ob Sonar '@ SuppressFBWarnings' richtig interpretiert (hinzugefügt, um Konflikte mit' java.lang.SuppressWarnings' zu vermeiden) und es auch ignoriert. –

+0

AFAIK, Sonar verwendet FindBugs. Wenn FindBugs diese Anmerkungen behandelt, sehe ich nicht, warum sie nicht funktionieren würden, wenn FindBugs über Sonar ausgeführt wird. Sollte sowieso nicht schwer zu testen sein. –

+4

Der FAQ-Link ist veraltet. Hier ist die neue [FAQ] (http://docs.sonarqube.org/display/HOME/Frequently+Asked+Questions#FrequentlyAskedQuestions-Howtoremovefalsepositiveissues?) – wiredniko

116

Sie eine Klasse oder ein Verfahren mit SuppressWarnings mit Anmerkungen versehen kann

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

Tintenfisch: S00112 ist in diesem Fall eine Sonar-ID. Sie finden diese ID in der Sonar-Benutzeroberfläche. Gehe zu Issues Drilldown. Suchen Sie nach einem Problem, bei dem Warnungen unterdrückt werden sollen. In der roten Frage-Box in Ihrem Code gibt es eine Regel-Verknüpfung mit einer Definition eines bestimmten Problems. Sobald Sie darauf klicken, wird die ID oben auf der Seite angezeigt.

+6

Ich kann bestätigen, dass dies auch mit einer bestimmten FindBugs-Regel-ID funktioniert, z. '@SuppressWarnings (" findbugs: UI_INHERITANCE_UNSAFE_GETRESOURCE ")'. – bcody

+5

Das Problem ist, dass Eclipse eine Warnung 'Unsupported @SuppressWarnings (" squid: S00112 ")' anzeigt. Sie können Eclipse so konfigurieren, dass dies ignoriert wird, aber ein Tippfehler wie in '@SuppressWarnings (" uncheckedd ")' wird nicht erkannt. –

40

Ich empfehle, dass Sie versuchen, bestimmte Warnungen zu unterdrücken, indem Sie @SuppressWarnings("squid:S2078") verwenden.

Für mehrere Warnungen unterdrücken Sie können es tun, wie diese @SuppressWarnings({"squid:S2078", "squid:S2076"})

Es gibt auch die //NOSONAR Kommentar, der Sonarqube alle Fehler für eine bestimmte Leitung zu ignorieren erzählt.

Schließlich, wenn Sie die richtigen Rechte für die Benutzeroberfläche haben, können Sie ein Flag als falsches positives direkt von der Schnittstelle ausstellen.

Der Grund, warum ich die Unterdrückung bestimmter Warnungen empfehle, ist, dass es besser ist, ein bestimmtes Problem zu blockieren, statt //NOSONAR zu verwenden und ein Sonar-Problem durch Zufall in Ihrem Code zu riskieren.

Sie können in der FAQ

Hinweis mehr dazu lesen: Gábor Bakos auf die ältere FAQ verweist, jetzt 404s. Dies ist das erste für mich google Ergebnis so dass ich jemand helfen anderes wollen, dass die gleiche Frage haben könnte

Edit: 6/30/16 Sonarqube jetzt SonarLint genannt

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

Auf links unten wird es die Tintenfisch-Nummer haben (ex. squid:S1185 Wartbarkeit> Verständlichkeit)

So können Sie es durch @SuppressWarnings("squid:S1185")

+2

Vielen Dank für den Hinweis auf mehrere Sonar Cube Warnungen ingnoe – AlexWien

+1

Das andere Problem mit der Kennzeichnung als falsches positives auf der Schnittstelle ist, dass, wenn aus irgendeinem Grund das Projekt gelöscht und neu hinzugefügt wird, alle von Ihnen gesetzten Flags verschwunden sind. – annedroiid

3

ich nicht Tintenfisch Nummer in Sonar 5.6 Lage zu finden, zu unterdrücken, mit dieser Anmerkung funktioniert auch:

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