2016-09-20 9 views
0

Я бегу FindBugs на код ниже он дает мне ошибку нижеНесовместимые битовые маски в findBug IntelliJ

Несовместимые битовые маски Этот метод сравнивает выражение вида (е | С) к D., которые всегда будут сравнивать неравномерным из-за конкретных значений констант C и D. Это может указывать на логическую ошибку или опечатку. Как правило, эта ошибка возникает из-за того, что код хочет выполнить тест на членство в битовом наборе, но использует побитовый оператор OR («|») вместо побитового И («&»).

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

      ); 
     } 
    } 

Я также использую клевер для моего тестового покрытия

Может кто-нибудь помочь мне исправить это?

ответ

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-класс и видеть результат), поэтому на самом деле не рекомендуется запускать какой-либо статический анализ кода на инструментальном исходном коде.