2015-12-07 57 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

您的问题背后的主要问题是,检查不依赖于分析开关的控制流引发一个问题,但而纯粹的语法可能最终会出现假阴性(如票中)或误报(您的情况)。