【发布时间】:2013-08-08 15:56:46
【问题描述】:
我有一段代码基本上是这样的:
public MyObject getData(boolean someFlag) {
String select1 = "SELECT * FROM myTable WHERE someInteger = ?";
SqlHostvariablen hostvars = new SqlHostvara();
hostvars.addInteger(myField.getSomeInteger);
String[][] selarray = SqlHelper.doSelectAsMatrix(select1, hostvars);
if (selarray.length == 0) {
throw new IllegalArgumentException("Nothing found");
}
MyObject foo = new MyObject();
int i = 0;
foo.setSomething1(selarray[0][i++]);
foo.setSomething2(selarray[0][i++]);
foo.setSomething3(selarray[0][i++]);
foo.setSomething4(selarray[0][i++]);
foo.setSomething5(selarray[0][i++]);
foo.setSomething6(selarray[0][i++]);
foo.setSomething7(selarray[0][i++]);
foo.setSomething8(transformSomething8(selarray[0][i++]));
foo.setSomething9(selarray[0][i++]);
foo.setSomething10(selarray[0][i++]);
String someValue1 = selarray[0][i++];
String someValue2 = selarray[0][i++];
foo.setSomething11(selarray[0][i++]);
doSomethingWithFoo(foo, someFlag, someValue1, someValue2);
doSomethingElseWithFoo(foo);
return foo;
}
标识符和 SQL 语句是匿名的,但我的方法看起来是一样的。
现在 Checkstyle 声称,如果这种方法是 12,则循环复杂性。我一直以为我知道 CC 是什么,据我所知,我会说这种方法 CC 是 2。有一个 if 创建了一条新路径因此,代码和控制流图有 2 个路径/出口点。我看不出还有什么地方可以通过代码。
我是完全遗漏了什么还是 Checkstyle 错了?
【问题讨论】:
-
可能由于数组操作上的索引越界未处理异常而导致一些隐藏路径?只是一个想法。
-
@criticalfix 也想过这个问题,但找不到任何类似的信息:-/
-
直接检验假设可能更直接。如果你注释掉你的 foo.setSomething 行并且你的 CC 降到 11,那么criticalfix 可能会出现问题
-
事实证明,将其关闭并再次打开会有所帮助。警告今天早上消失了。昨天即使清理项目也无济于事。很抱歉打扰了各位,感谢您的帮助。我现在将关闭此问题并稍后将其删除,以便感兴趣的人仍然可以阅读此评论一段时间。
-
@stonedsquirrel:更好的 answer the question 带有“Checkstyle 确实需要重新启动”
标签: checkstyle cyclomatic-complexity