我最近开始在我正在做的 java 构建中使用 findbugs 静态分析工具。第一份报告带有大量高优先级警告。作为一个痴迷型的人,我已经准备好将他们全部击倒。但是,我一定错过了什么。在比较事物时,我会收到大部分警告。比如下面的代码:
public void setSpacesPerLevel(int value)
{
if( value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
在读取的 if 语句中产生高优先级警告。
文件:Indenter.java,行:60,类型:BIT_AND_ZZ,优先级:高,类别:正确检查 sample.Indenter.setSpacesPerLevel(int) 中是否 ((...) & 0) == 0
我正在将 int 与 int 进行比较,这似乎很常见。通过类似的简单比较,我得到了很多此类错误。
对于看似简单的代码块,我还有很多其他高优先级警告。我在这里错过了什么吗?我意识到静态分析会产生误报,但我看到的错误似乎太微不足道而不能成为误报。
这个也让我摸不着头脑。
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
这给出了以下 findbugs 警告:
File: Indenter.java, Line: 160, Type: IL_INFINITE_LOOP, Priority: High, Category: CORRECTNESS
There is an apparent infinite loop in sample.Indenter.indent()
This loop doesn't seem to have a way to terminate (other than by perhaps throwing an exception).
有任何想法吗?
所以基本上我有一些文件和 50-60 个类似于上面的高优先级警告。我正在使用 findbugs 1.3.9 并从 findbugs ant 任务中调用它
更新: 我让这个构建由一个 hudson 服务器执行,并让 Clover 检测代码以进行代码覆盖。当我关闭它时,我所有的高优先级警告都消失了。现在这是有道理的。感谢您的反馈。