Sonar,S128:Switch case 应该以无条件 "break" 语句结束 VS continue
Sonar, S128: Switch cases should end with an unconditional "break" statement VS continue
规则 squid:128 的存在似乎是为了防止 switch case 失败,除非明确说明。这似乎是一个合理的规则,因为忘记休息是一个常见的错误。
然而,当需要时,失败是完全有效的。
此规则的文档指出实现失败的唯一方法是使用继续
case 4: // Use of continue statement
continue;
我还检查了 SwitchCaseWithoutBreakCheck 的源代码是否真正检查了 "continue" 语句
的实现
@Override
public void visitContinueStatement(ContinueStatementTree tree) {
super.visitContinueStatement(tree);
markSwitchCasesAsCompliant();
}
但是,Java 语言不支持在 switch/case 中继续。在线文档和 ./java-checks/src/test/files/checks/SwitchCaseWithoutBreakCheck.java 都不是有效的 Java 程序。
我是不是遗漏了什么,或者这条规则是否完全被打破并阻止了 fall-through 的使用?
你说这里的描述是错误的是完全正确的,然后你实际上没有办法不触发规则如果你想实际使用 fallthrough (因此你可能想要将问题标记为误报在这种情况下或一起停用规则)
调用规则 "broken" 是一种观点,所以我不会争论 ;)
不过,已经创建了一个工单来处理这个问题:http://jira.sonarsource.com/browse/SONARJAVA-1169
规则 squid:128 的存在似乎是为了防止 switch case 失败,除非明确说明。这似乎是一个合理的规则,因为忘记休息是一个常见的错误。
然而,当需要时,失败是完全有效的。
此规则的文档指出实现失败的唯一方法是使用继续
case 4: // Use of continue statement
continue;
我还检查了 SwitchCaseWithoutBreakCheck 的源代码是否真正检查了 "continue" 语句
的实现 @Override
public void visitContinueStatement(ContinueStatementTree tree) {
super.visitContinueStatement(tree);
markSwitchCasesAsCompliant();
}
但是,Java 语言不支持在 switch/case 中继续。在线文档和 ./java-checks/src/test/files/checks/SwitchCaseWithoutBreakCheck.java 都不是有效的 Java 程序。
我是不是遗漏了什么,或者这条规则是否完全被打破并阻止了 fall-through 的使用?
你说这里的描述是错误的是完全正确的,然后你实际上没有办法不触发规则如果你想实际使用 fallthrough (因此你可能想要将问题标记为误报在这种情况下或一起停用规则)
调用规则 "broken" 是一种观点,所以我不会争论 ;)
不过,已经创建了一个工单来处理这个问题:http://jira.sonarsource.com/browse/SONARJAVA-1169