2015-06-18 18 views
3

規則squid:128似乎存在以防止在開關盒中出現故障,除非明確聲明。這似乎是一個合理的規則,因爲它是一個失敗的突破聲明是一個常見的錯誤。Sonar,S128:開關盒應該以無條件的「break」語句結束VS繼續

然而,通緝是完全有效的,當需要。

這條規則的文檔指出,實現落空的唯一方法是使用繼續

case 4:        // Use of continue statement 
    continue; 

我還檢查SwitchCaseWithoutBreakCheck的源代碼是實現真正檢查「繼續」的聲明

@Override 
    public void visitContinueStatement(ContinueStatementTree tree) { 
    super.visitContinueStatement(tree); 
    markSwitchCasesAsCompliant(); 
    } 

但是,Java語言不支持在switch/case中繼續。在線文檔和./java-checks/src/test/files/checks/SwitchCaseWithoutBreakCheck.java都不是有效的Java程序。

我是否錯過了一些東西,或者這個規則是完全破壞的,並且防止使用fall-through?

回答

2

你完全正確地說,這裏的描述是錯誤的,然後你實際上沒有辦法不觸發規則,如果你想實際使用貫穿性(因此你可能要麼標記問題爲誤報爲這種情況下,或停用產品總數的規則)

調用規則「破」是一個意見,所以我不會爭辯;)

儘管如此,門票已經建立,以處理這個問題:http://jira.sonarsource.com/browse/SONARJAVA-1169

+0

感謝您創建票證。我同意允許或禁止穿越是主觀的。但是,如果S128的目標是禁止掉頭,我相信文件應該更清楚地說明。如果不是,那麼能夠明確說明給定的突破是有意的(IIRC有可能在某個時候使用特定的尾隨評論)將是非常好的。禁用規則並將問題標記爲誤報都不能使讀者明確地明白。 [注:我更願意直接參與Jira,但似乎不可能創建一個帳戶] –

+0

因此,以及**可以如何實現所需的'/ * FALLTHROUGH * /'(lint for C語法)? – mirabilos