gpt4 book ai didi

java - Sonar 似乎忽略了 catch block 中设置的变量

转载 作者:行者123 更新时间:2023-11-30 02:23:11 25 4
gpt4 key购买 nike

有谁知道为什么 SonarQube 在以下示例中检测到违反规则“条件执行的 block 应该可达”( squid:S2583 )?这是误报吗?

在这段Java代码中,读取一个文件,并且在读取输入流的过程中可能会发生一个EOFException(或多个)。因此,异常被捕获并处理,并且设置一个标志来记住它发生了。但是,Sonar 不会考虑第一个 catch block 中的行 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)

最佳答案

这似乎是 SonarJava 中数据流分析期间如何处理 catch block 的问题。不考虑捕获被调用方法的 throws 声明中声明的异常子类型的 Catch block ,因此引擎永远不会看到对变量的赋值。

我创建了以下票证来解决此问题 https://jira.sonarsource.com/browse/SONARJAVA-2483

关于java - Sonar 似乎忽略了 catch block 中设置的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com