Permalink
Browse files

Complete work on getting nested finally block dedup working

  • Loading branch information...
Martin
Martin committed Feb 23, 2013
1 parent 3084dee commit f2748e13b69547fc49f1c2efb16297b86dd073fa
@@ -95,17 +95,23 @@ public void testCoverageResult() {

// 9. Finally block conditional coverage
// Fully covered
assertLine("finallyBranchCoverage.finally", ICounter.FULLY_COVERED);
// When compiled from maven no instructions are tagged as being on this
// line
// assertLine("finallyBranchCoverage.finally", ICounter.FULLY_COVERED);
assertLine("finallyBranchCoverage.cond1", ICounter.FULLY_COVERED, 0, 2);
assertLine("finallyBranchCoverage.contents1", ICounter.FULLY_COVERED);
assertLine("finallyBranchCoverage.cond2", ICounter.FULLY_COVERED, 0, 2);
assertLine("finallyBranchCoverage.contents2", ICounter.FULLY_COVERED);

// 10. Nested finally block
// Fully covered
assertLine("nestedFinally.finally", ICounter.FULLY_COVERED);
// When compiled from maven no instructions are tagged as being on this
// line
// assertLine("nestedFinally.finally", ICounter.FULLY_COVERED);
assertLine("nestedFinally.finally-line", ICounter.FULLY_COVERED);
assertLine("nestedFinally.inner-finally", ICounter.FULLY_COVERED);
// When compiled from maven no instructions are tagged as being on this
// line
// assertLine("nestedFinally.inner-finally", ICounter.FULLY_COVERED);
assertLine("nestedFinally.inner-finally-line", ICounter.FULLY_COVERED);
}

@@ -732,10 +732,17 @@ private void completeFinallyBlockDedup(
methodInsnPointers[ii] += 1;
}
}
if (isInsnAtom(methodInsnPointers[methodInsnPointers.length - 1] + 1)) {
methodInsnPointers[methodInsnPointers.length - 1] += 1;
final int maxPointer = methodAtoms.size() - 1;
final int finalPointerIndex = methodInsnPointers.length - 1;
final int finalPointer = methodInsnPointers[finalPointerIndex];
if (finalPointer <= (maxPointer - 1)
&& isInsnAtom(finalPointer + 1)) {
methodInsnPointers[finalPointerIndex] += 1;
} else if (finalPointer <= (maxPointer - 2)
&& isInsnAtom(finalPointer + 2)) {
methodInsnPointers[finalPointerIndex] += 2;
} else {
methodInsnPointers[methodInsnPointers.length - 1] -= 1;
methodInsnPointers[finalPointerIndex] -= 1;
}
disableCoverageOfNonPrimaryFinallyBlock(methodInsnPointers,
isFirstInBlock);
@@ -758,6 +765,9 @@ private void completeFinallyBlockDedup(
}
} else {
methodInsnPointers[ii] += 2;
if (!isInsnAtom(methodInsnPointers[ii])) {
methodInsnPointers[ii] += 1;
}
}
}
disableCoverageOfNonPrimaryFinallyBlock(methodInsnPointers,
@@ -864,7 +874,7 @@ public FinallyBlockEndInstructions(
private void disableCoverageOfNonPrimaryFinallyBlock(
final int[] finallyBlockPointers, final boolean[] isFirstInBlock) {
for (int ii = 0; ii < finallyBlockPointers.length; ii++) {
if (!isFirstInBlock[ii]) {
if (!isFirstInBlock[ii] && isInsnAtom(finallyBlockPointers[ii])) {
methodAtoms.get(finallyBlockPointers[ii]).instruction.disable();
}
}

0 comments on commit f2748e1

Please sign in to comment.