Skip to content

Commit ebe64b6

Browse files
committed
Added catch clause count to computation of cyclomatic complexity for analysis level 2
Signed-off-by: Saurabh Sinha <[email protected]>
1 parent 392d12a commit ebe64b6

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/main/java/com/ibm/cldk/SymbolTable.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,7 @@ private static int getCyclomaticComplexity(CallableDeclaration callableDeclarati
324324
.reduce(0, Integer::sum);
325325
int conditionalExprCount = callableDeclaration.findAll(ConditionalExpr.class).size();
326326
int catchClauseCount = callableDeclaration.findAll(CatchClause.class).size();
327-
int cyclomaticComplexity = ifStmtCount + loopStmtCount + switchCaseCount + conditionalExprCount + catchClauseCount + 1;
328-
return cyclomaticComplexity;
327+
return ifStmtCount + loopStmtCount + switchCaseCount + conditionalExprCount + catchClauseCount + 1;
329328
}
330329

331330
/**

src/main/java/com/ibm/cldk/utils/AnalysisUtils.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.ibm.wala.ipa.callgraph.impl.DefaultEntrypoint;
2424
import com.ibm.wala.ipa.cha.IClassHierarchy;
2525
import com.ibm.wala.ssa.IR;
26+
import com.ibm.wala.ssa.ISSABasicBlock;
2627
import com.ibm.wala.ssa.SSAConditionalBranchInstruction;
2728
import com.ibm.wala.ssa.SSASwitchInstruction;
2829
import com.ibm.wala.types.ClassLoaderReference;
@@ -96,7 +97,11 @@ public static int getCyclomaticComplexity(IR ir) {
9697
int switchBranchCount = Arrays.stream(ir.getInstructions())
9798
.filter(inst -> inst instanceof SSASwitchInstruction)
9899
.map(inst -> ((SSASwitchInstruction) inst).getCasesAndLabels().length).reduce(0, Integer::sum);
99-
return conditionalBranchCount + switchBranchCount + 1;
100+
Iterable<ISSABasicBlock> iterableBasicBlocks = ir::getBlocks;
101+
int catchBlockCount = (int) StreamSupport.stream(iterableBasicBlocks.spliterator(), false)
102+
.filter(ISSABasicBlock::isCatchBlock)
103+
.count();
104+
return conditionalBranchCount + switchBranchCount + catchBlockCount + 1;
100105
}
101106

102107
public static Pair<String, Callable> getCallableFromSymbolTable(IMethod method) {

0 commit comments

Comments
 (0)