aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java')
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
index ba862adc..82b97466 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
@@ -173,6 +173,13 @@ public class MethodAnalyzer extends MethodProbesVisitor
}
}
+ private final Map<AbstractInsnNode, Set<AbstractInsnNode>> replacements = new HashMap<AbstractInsnNode, Set<AbstractInsnNode>>();
+
+ public void replaceBranches(final AbstractInsnNode source,
+ final Set<AbstractInsnNode> newTargets) {
+ replacements.put(source, newTargets);
+ }
+
@Override
public void visitLabel(final Label label) {
currentLabel.add(label);
@@ -362,6 +369,7 @@ public class MethodAnalyzer extends MethodProbesVisitor
for (final CoveredProbe p : coveredProbes) {
p.instruction.setCovered(p.branch);
}
+
// Merge:
for (final Instruction i : instructions) {
final AbstractInsnNode m = i.getNode();
@@ -371,6 +379,7 @@ public class MethodAnalyzer extends MethodProbesVisitor
nodeToInstruction.get(r).merge(i);
}
}
+
// Report result:
coverage.ensureCapacity(firstLine, lastLine);
for (final Instruction i : instructions) {
@@ -378,8 +387,23 @@ public class MethodAnalyzer extends MethodProbesVisitor
continue;
}
- final int total = i.getBranches();
- final int covered = i.getCoveredBranches();
+ final int total;
+ final int covered;
+ final Set<AbstractInsnNode> r = replacements.get(i.getNode());
+ if (r != null) {
+ int cb = 0;
+ for (AbstractInsnNode b : r) {
+ if (nodeToInstruction.get(b).getCoveredBranches() > 0) {
+ cb++;
+ }
+ }
+ total = r.size();
+ covered = cb;
+ } else {
+ total = i.getBranches();
+ covered = i.getCoveredBranches();
+ }
+
final ICounter instrCounter = covered == 0 ? CounterImpl.COUNTER_1_0
: CounterImpl.COUNTER_0_1;
final ICounter branchCounter = total > 1