我在下面的代码上运行findbugs,它给我下面的错误
不兼容的位掩码 该方法将形式(e | C)的表达式与D进行比较,由于常数C和D的特定值,它总是比较不等。这可能表示逻辑错误或拼写错误。 通常,出现此错误是因为代码想要在位集中执行成员资格测试,但使用按位OR运算符(“|”)而不是按位AND(“&”)。
if (!conditionplace.isEmpty())
{
for (Place place : conditionplace) {
parent.writeWithModificationType(
condId,
place.getId(),
place.getDisplay()
);
}
}
我也在使用clover进行测试覆盖
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
您获得的错误与Clover的工作方式密切相关。它会检测代码的每一行以记录其执行情况。当它检测分支条件时,它会添加额外的条件来记录真正的分支执行,使逻辑条件保持不变。所以在你的情况下它会做这样的事情
if (
(!conditionplace.isEmpty()) && (__CLR4_2_000ito7x4bh.R.iget(9)!=0|true) // if true
||
(__CLR4_2_000ito7x4bh.R.iget(10)==0&false) //else
) {
//code
它使用非电路运算符来确保其代码被执行,并且能够记录条件中所有表达式的执行(可能有很多表达式)。
一般来说,Clover会添加大量奇怪的,机器生成的代码(您可以使用Java类并查看结果),因此不建议在已检测的源代码上运行任何类型的静态代码分析。