【发布时间】:2018-02-28 05:57:48
【问题描述】:
有谁知道为什么 SonarQube 在以下示例中检测到违反规则“条件执行的块应该是可访问的”(squid:S2583)?这是误报吗?
在这段Java代码中,读取一个文件,在读取输入流的过程中可能会出现一个EOFException(或多个)。因此,异常被捕获和处理,并设置一个标志来记住它发生了。但是,Sonar 没有考虑第一个 catch 块中的 exHappened = true; 行,并声称变量始终是 false:
public static boolean doSomething() {
boolean exHappened = false;
try (DataInputStream s = new DataInputStream(new FileInputStream("test"))) {
LOGGER.info("Doing something...");
}
catch (EOFException eof) { // this Exception can definitely happen
exHappened = true;
}
catch (IOException io) {
LOGGER.error("sorry", io);
}
if (exHappened) { // Sonar thinks this condition is always false
return false;
}
else {
return true;
}
}
为了更清楚,在try { } 中添加throw new EOFException(),然后条件将始终为真,而 Sonar 仍然声称它始终为假...
(我使用的是 SonarQube 5.6.6 和 SonarJava 插件 4.13.0.11627)
【问题讨论】:
-
根据sonarqube.org/community/feedback,SonarQube Google Group 是一个更好的报告错误的地方,他们的 JIRA 可能是最好的。
-
你是对的。下次我将在 SonarQube Google Group 中发布有关可能误报的问题(顺便说一下,他们的 JIRA 是只读的)。
-
您可以向 Google Group 或此处发布问题,这两个渠道均由社区监控。您使用的 SonarJava 插件和 SonarQube 的版本是什么?
-
问题更新:SonarQube 5.6.6 和 SonarJava 插件 4.13.0.11627
-
嗨@TiborBlenessy,有什么更新吗?
标签: java sonarqube sonarlint false-positive