2016-02-26 5 views
0

Для следующего надуманного примера (реальный код на самом деле имеет смысл, я обещаю), Sonarqube 5.3 с плагином Java 2.10 даст мне страшное «Измените это условие, чтобы оно не всегда оценивать «истина»»:squid: S2583 - Sonarqube ложно положителен при использовании переключателя

public String sonarLint(DayOfWeek dow) { 
    boolean one = false; 
    boolean two = false; 
    switch (dow) { 
    case MONDAY: 
     one = true; 
    case TUESDAY: 
     two = true; 
     break; 
    default: 
     // nothing 
    } 
    return one && two ? "yes" : "no"; 
} 

насколько я могу видеть, когда dow является MONDAY, условие истинно, в то время как оно ложно в противном случае (IntelliJ соглашается, кстати, говорил мне, что two всегда whill быть правдой когда он вообще оценивается). Я ударил ошибку в Sonarqube здесь?

ответ

0

Сонар должен сообщить об ошибке и для отсутствия инструкции break.

Корпуса выключателей должны заканчиваться безусловным оператором «break» (Squid: S128).

Как только у вас есть оператор break в обоих случаях, оператор никогда не будет выполнен как истинный.

+2

Это правда, но это не имеет никакого отношения к моему вопросу. Как уже отмечалось, реальный код выглядит немного по-другому. –

+0

Каковы все значения, которые имеет ваш DayOfWeek Enum? Если есть только два разных значения, которые он может иметь (MONDAY, TUESDAY), тогда он сообщит о той же ошибке, что ваше условие всегда будет оценено как true. – PyThon

+0

'java.time.DayOfWeek' содержит, а не неожиданно, 7 значений enum. Даже если это не так, пути для «MONDAY» и «TUESDAY» достаточно разные. –

Смежные вопросы