我最近开始在我正在做的java构建中使用findbugs静态分析工具。第一份报告带有高优先级警告。作为迷恋型的人,我准备好全力以赴。但是,我必须错过一些东西。比较事情时,我会得到大部分警告。如下面的代码:Findbugs和比较
public void setSpacesPerLevel(int value)
{
if(value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
在读取的if语句中产生高优先级警告。
文件:Indenter.java,行:60,类型: BIT_AND_ZZ,优先顺序:高度,类别: 正确性检查,看是否((...)& 0)== 0 样本。 Indenter.setSpacesPerLevel(int)
我将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的调用蚂蚁任务
UPDATE: 我有这个版本是由哈德森服务器执行,不得不由三叶草代码覆盖被仪表的代码。当我将其关闭时,所有高优先级警告都消失了。这是有道理的。感谢您的反馈。
如果您要更改循环内的spacesPerLevel,这可能是一个无限循环,例如。 spacesPerLevel = spaces + 2;或减少空间。 – Anton 2010-06-01 16:02:37
刚刚更新了包含更多代码片段的问题 – 2010-06-01 16:06:05
您是否正在编译调试信息? – Anton 2010-06-01 16:28:16