223

是否可以关闭不希望测量的特定代码块的声纳( www.sonarsource.org )测量?

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

4

6 回答 6

299

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

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

squid:S00112在这种情况下是 Sonar 问题 ID。您可以在 Sonar UI 中找到此 ID。转到问题钻取。找到一个你想禁止警告的问题。在代码中的红色问题框中,有一个带有给定问题定义的规则链接。单击该按钮后,您将在页面顶部看到 ID。

于 2015-04-01T21:05:17.600 回答
121

我建议您尝试使用@SuppressWarnings("squid:S2078").

为了抑制多个警告,您可以这样做@SuppressWarnings({"squid:S2078", "squid:S2076"})

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

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

我建议抑制特定警告的原因是,更好的做法是阻止特定问题,而不是使用//NOSONARSonar 问题并冒着意外潜入代码的风险。

您可以在常见问题解答中阅读有关此内容的更多信息

编辑:2016 年 6 月 30 日 SonarQube 现在称为 SonarLint

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

在左下角,它将有 squid 编号(例如,squid:S1185可维护性 > 可理解性)

那么你可以通过@SuppressWarnings("squid:S1185")

于 2015-05-21T20:04:18.363 回答
99

这是一个常见问题解答。您可以放在//NOSONAR触发警告的行尾。

//NOSONAR

对于大多数语言,SonarQube 支持使用通用机制://NOSONAR在问题的行尾。这将压制所有可能在网上提出的问题——现在和将来。

不过,我更喜欢使用 FindBugs 机制,其中包括添加 @SuppressFBWarnings 注释:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
于 2012-06-10T20:48:45.653 回答
10

如果您无法帮助您的代码,请在收到警告的行上使用 //NOSONAR。有用!

于 2018-10-19T07:11:24.937 回答
5

我无法在声纳 5.6 中找到 squid 编号,此注释也适用:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
于 2017-03-15T14:39:09.347 回答
4

实际上很难理解哪个是问题的 ID,所以我使用了 @SuppressWarnings("all") 注释,它基本上适用于所有规则,但更准确地说,最好使用 ID。点击查看图片 -> 声纳问题 ID

所以当点击“为什么这是一个问题?” 在红色框中,您将进入一个带有解释的屏幕。在左侧的屏幕顶部,您可以看到规则名称,左侧是该规则的 ID。因此,要申请此规则,您只需将此注释添加到您的类或方法中。

@SuppressWarnings("common-java:DuplicatedBlocks")

于 2021-06-23T13:05:52.287 回答