findBug intellij中不兼容的位掩码

时间:2016-09-20 16:29:56

标签: java intellij-idea findbugs clover

我在下面的代码上运行findbugs,它给我下面的错误

不兼容的位掩码 该方法将形式(e | C)的表达式与D进行比较,由于常数C和D的特定值,它总是比较不等。这可能表示逻辑错误或拼写错误。 通常,出现此错误是因为代码想要在位集中执行成员资格测试,但使用按位OR运算符(“|”)而不是按位AND(“&”)。

  if (!conditionplace.isEmpty()) 
   {
           for (Place place : conditionplace) {
            parent.writeWithModificationType(
                condId,
                place.getId(),
                place.getDisplay()

            );
        }
    }

我也在使用clover进行测试覆盖

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 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类并查看结果),因此不建议在已检测的源代码上运行任何类型的静态代码分析。