2015-12-07 54 views
2

我正在使用Sonar(4.5.4)來測試代碼質量。對於此示例代碼:嵌套Case聲明中的聲納問題

switch (operationType) { 

    case A: 
     return doSomething1(); 

    case B: 
     return doSomething2(); 

    case C: 
     return doSomething3(); 

    case D: 
     return doSomething4(); 

    case E: 
     switch (X) { 
      case X1: 
       return doSomething5(); 
      case X2: 
       return doSomething6(); 
      default: 
       return doSomething7(); 
     } 
    default: 
     return doSomething8(); 

} 

我得到這個爲關鍵問題:

末該開關的情況下與無條件的中斷,繼續,恢復或throw語句。

的情況下é & X1。我對每種情況都有一個回覆聲明(另外,我包含默認)。

這個問題的原因是什麼?

+0

你的代碼沒問題。這種情況可能只是聲納不能理解的代碼模式列表中的另一種情況。我最喜歡的是它無法檢測線路/分支的覆蓋範圍:Sonar認爲捕獲中有8個分支,你永遠無法覆蓋。 – Bohemian

+0

請看下面的鏈接,它可能會幫助你 https://jira.sonarsource.com/browse/SONARJAVA-415 http://sonarqube-archive.15.x6.nabble.com/RE-Sonar -3-7-1-Java-Ecosystem-1-3-to-1-4-Complement-td5017817.html – Zia

+0

@Bohemian請注意,這與SonarQube無關,但這與JaCoCo有關,請參閱https ://github.com/jacoco/jacoco/issues/82和https://github.com/jacoco/jacoco/issues/15 – benzonico

回答

1

這是一個已知的問題(並因此在分析一個bug): https://jira.sonarsource.com/browse/SONARJAVA-1336

您的問題背後的主要問題是,檢查不依賴於分析開關的控制流引發一個問題,但而純粹的語法可能最終會出現假陰性(如票中)或誤報(您的情況)。