2016-02-26 20 views
0

對於以下人爲的例子(真實的代碼實際上是有道理的,我承諾),Sonarqube 5.3與Java插件2.10會給我可怕的「改變這個條件,使它不會始終評估爲「真」」:魷魚: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"; 
} 

據我所看到的,當dowMONDAY,條件爲真,而這否則爲false(的IntelliJ同意,順便說一句,告訴我,two whill始終是真實的當它被評估時)。我在這裏遇到了Sonarqube的錯誤嗎?

回答

0

聲納還應該報告缺失break語句的錯誤。

交換機箱應該以無條件的「break」語句(Squid:S128)結束。

一旦你在這兩種情況下都有break語句,那麼statement永遠不會被執行爲true。

+2

的確如此,但與我的問題無關。正如所指出的,真實代碼看起來有點不同。 –

+0

你的DayOfWeek Enum有什麼值?如果只有兩個不同的值(MONDAY,TUESDAY),那麼它會報告相同的錯誤,您的條件將始終評估爲true。 – PyThon

+0

'java.time.DayOfWeek'包含7個枚舉值,而不是令人驚訝的。即使沒有,「MONDAY」和「TUESDAY」的路徑也有很大不同。 –