关闭声纳的某些代码


164

是否可以针对特定的代码块关闭声纳(www.sonarsource.org)测量,而哪些是不想测量的?

一个示例是Findbugs输出的“保留堆栈跟踪”警告。当离开服务器时,如果客户端不知道该异常,我可能只想将消息传递回客户端,而不包括我刚刚捕获的实际异常(因为该客户端没有该JAR,例如包含例外)。

Answers:


70

这是一个常见问题解答。您可以//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)是否也忽略了它。
MarcelStör13年

AFAIK,Sonar使用FindBugs。因此,如果FindBugs处理这些注释,我看不到为什么在通过Sonar运行FindBugs时它们不起作用。无论如何,应该不难测试。
JB Nizet

4
FAQ链接已过时。这是新的常见问题解答
Wirediko

11
您能否提供指向SonarQube常见问题解答的其他链接?我看到的是登录表单而不是常见问题解答
Win4ster,

232

您可以使用SuppressWarnings注释类或方法

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

squid:S00112在这种情况下是声纳问题ID。您可以在Sonar UI中找到此ID。转到问题明细。查找您要禁止显示警告的问题。在代码的红色问题框中,有一个带有给定问题定义的“规则”链接。单击后,您将在页面顶部看到ID。


8
我可以确认这也适用于特定的FindBugs规则ID,例如@SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE")
bcody 2015年

19
问题是Eclipse显示警告Unsupported @SuppressWarnings("squid:S00112")。您可以配置Eclipse忽略它,但是@SuppressWarnings("uncheckedd")不会检测到诸如in的错字。
Ortomala Lokni '17


89

我建议您尝试使用来禁止显示特定警告@SuppressWarnings("squid:S2078")

要取消显示多个警告,您可以这样操作 @SuppressWarnings({"squid:S2078", "squid:S2076"})

还有//NOSONAR一条评论告诉SonarQube忽略特定行的所有错误。

最后,如果您对用户界面拥有适当的权限,则可以直接从用户界面中将标志发布为误报。

我之所以建议禁止使用特定警告,是因为更好的做法是阻止特定问题,而不要使用//NOSONAR并冒着Sonar问题偶然在您的代码中蔓延的风险。

您可以在常见问题解答中了解更多信息

注意:GáborBakos指向的是现在的404s较早的FAQ。这是我的第一个Google搜索结果,所以我想帮助其他可能有相同问题的人

编辑:16/6/30 SonarQube现在称为SonarLint

如果您想知道如何查找鱿鱼编号。只需单击Sonar消息(例如Remove this method to simply inherit it.),Sonar问题就会扩大。

左下角将显示鱿鱼编号(例如,squid:S1185可维护性>可理解性)

所以你可以通过抑制它 @SuppressWarnings("squid:S1185")


2
感谢您忽略多个声纳立方体警告的提示
AlexWien

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用于基于Sonar的Java数据库(SonarAnalyzer Java)。pmd并且checkstyle在其他规则存储库中。
Daniel C. Sobral
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.