2015-06-18 17 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