aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2011-01-08 18:15:30 +0000
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2011-01-08 18:15:30 +0000
commit5f6c308ae550ddfe2c139c47e39c8cbab6e7d535 (patch)
tree0850e8b83ab66f4a2660fc5860ab1099c2155773
parentb075623319d8b01b02b75a530dfa6d3b79392d1e (diff)
downloadjacoco-5f6c308ae550ddfe2c139c47e39c8cbab6e7d535.tar.gz
Trac #130: Count instructions per line.
-rw-r--r--org.jacoco.ant/src/org/jacoco/ant/ReportTask.java2
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/ClassCoverageTest.java5
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java2
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java82
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java107
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/LineImplTest.java (renamed from org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java)3
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/LinesImplTest.java412
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/MethodAnalyzerTest.java22
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/MethodCoverageTest.java95
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/PackageCoverageTest.java9
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/SourceNodeImplTest.java (renamed from org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java)3
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/BlocksBeforeSuperConstructorTest.java2
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java6
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java6
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java6
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java2
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java37
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/BundleCoverage.java2
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/ClassCoverage.java5
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java33
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java8
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/ILines.java92
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/LineImpl.java (renamed from org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java)5
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/LinesImpl.java184
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/MethodAnalyzer.java9
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/MethodCoverage.java49
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/PackageCoverage.java2
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/SourceFileCoverage.java5
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/SourceNodeImpl.java (renamed from org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java)13
-rw-r--r--org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java14
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/MultiFormatterTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/html/NodePageTest.java4
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/html/SourceFilePageTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/html/SourceHighlighterTest.java87
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java9
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java5
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java11
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/xml/XMLReportNodeHandlerTest.java64
-rw-r--r--org.jacoco.report/src/org/jacoco/report/html/ClassPage.java7
-rw-r--r--org.jacoco.report/src/org/jacoco/report/html/SourceFilePage.java8
-rw-r--r--org.jacoco.report/src/org/jacoco/report/html/SourceHighlighter.java38
-rw-r--r--org.jacoco.report/src/org/jacoco/report/xml/XMLReportNodeHandler.java40
-rw-r--r--org.jacoco.report/src/org/jacoco/report/xml/report.dtd6
54 files changed, 296 insertions, 1243 deletions
diff --git a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
index 0eaa28a0..4bd3e577 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
@@ -495,7 +495,7 @@ public class ReportTask extends Task {
throw new BuildException("Group name must be supplied");
}
if (group.children.size() > 0) {
- return new CoverageNodeImpl(ElementType.GROUP, group.name, false);
+ return new CoverageNodeImpl(ElementType.GROUP, group.name);
} else {
final CoverageBuilder builder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(executionDataStore, builder);
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/ClassCoverageTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/ClassCoverageTest.java
index 706396d6..4aed503f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/ClassCoverageTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/ClassCoverageTest.java
@@ -12,7 +12,6 @@
package org.jacoco.core.analysis;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import org.junit.Test;
@@ -36,7 +35,6 @@ public class ClassCoverageTest {
assertEquals("java/lang/Object", data.getSuperName());
assertEquals(0, data.getInterfaceNames().length);
assertEquals("Sample.java", data.getSourceFileName());
- assertNotNull(data.getLines());
}
@Test
@@ -87,7 +85,8 @@ public class ClassCoverageTest {
private MethodCoverage createMethod(boolean covered) {
final MethodCoverage m = new MethodCoverage("sample", "()V", null);
- m.addInsn(covered, MethodCoverage.UNKNOWN_LINE);
+ m.increment(CounterImpl.getInstance(covered), CounterImpl.COUNTER_0_0,
+ ISourceNode.UNKNOWN_LINE);
return m;
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
index bf3aa6b4..b7621402 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
@@ -118,7 +118,7 @@ public class CounterComparatorTest {
private static final class MockBlockData extends CoverageNodeImpl {
MockBlockData(int total) {
- super(GROUP, "mock", false);
+ super(GROUP, "mock");
instructionCounter = CounterImpl.getInstance(total, 0);
}
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
index 9fd658b2..d1104b36 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
@@ -44,61 +44,61 @@ public class CoverageBuilderTest {
@Test
public void testCreateClassMissed() {
final MethodCoverage method = new MethodCoverage("doit", "()V", null);
- method.addInsn(false, 6);
- method.addInsn(false, 7);
- method.addInsn(false, 8);
+ method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
+ method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 7);
+ method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 8);
addClass(123L, "Sample", null, method);
final Collection<ClassCoverage> classes = coverageBuilder.getClasses();
- assertEquals(1, classes.size(), 1.0);
+ assertEquals(1, classes.size());
ClassCoverage c = classes.iterator().next();
assertEquals("Sample", c.getName());
- assertEquals(1, c.getClassCounter().getTotalCount(), 0.0);
- assertEquals(0, c.getClassCounter().getCoveredCount(), 0.0);
- assertEquals(1, c.getMethodCounter().getTotalCount(), 0.0);
- assertEquals(0, c.getMethodCounter().getCoveredCount(), 0.0);
- assertEquals(3, c.getLineCounter().getTotalCount(), 0.0);
- assertEquals(0, c.getLineCounter().getCoveredCount(), 0.0);
+ assertEquals(1, c.getClassCounter().getTotalCount());
+ assertEquals(0, c.getClassCounter().getCoveredCount());
+ assertEquals(1, c.getMethodCounter().getTotalCount());
+ assertEquals(0, c.getMethodCounter().getCoveredCount());
+ assertEquals(3, c.getLineCounter().getTotalCount());
+ assertEquals(0, c.getLineCounter().getCoveredCount());
final Collection<MethodCoverage> methods = c.getMethods();
- assertEquals(1, methods.size(), 1.0);
+ assertEquals(1, methods.size());
MethodCoverage m = methods.iterator().next();
assertEquals("doit", m.getName());
assertEquals("()V", m.getDesc());
- assertEquals(1, m.getMethodCounter().getTotalCount(), 0.0);
- assertEquals(0, m.getMethodCounter().getCoveredCount(), 0.0);
- assertEquals(3, m.getLineCounter().getTotalCount(), 0.0);
- assertEquals(0, m.getLineCounter().getCoveredCount(), 0.0);
+ assertEquals(1, m.getMethodCounter().getTotalCount());
+ assertEquals(0, m.getMethodCounter().getCoveredCount());
+ assertEquals(3, m.getLineCounter().getTotalCount());
+ assertEquals(0, m.getLineCounter().getCoveredCount());
}
@Test
public void testCreateClassCovered() {
final MethodCoverage method = new MethodCoverage("doit", "()V", null);
- method.addInsn(true, 6);
- method.addInsn(true, 7);
- method.addInsn(true, 8);
+ method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 6);
+ method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 7);
+ method.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 8);
addClass(123L, "Sample", null, method);
final Collection<ClassCoverage> classes = coverageBuilder.getClasses();
- assertEquals(1, classes.size(), 1.0);
+ assertEquals(1, classes.size());
ClassCoverage c = classes.iterator().next();
assertEquals("Sample", c.getName());
- assertEquals(1, c.getClassCounter().getTotalCount(), 0.0);
- assertEquals(1, c.getClassCounter().getCoveredCount(), 0.0);
- assertEquals(1, c.getMethodCounter().getTotalCount(), 0.0);
- assertEquals(1, c.getMethodCounter().getCoveredCount(), 0.0);
- assertEquals(3, c.getLineCounter().getTotalCount(), 0.0);
- assertEquals(3, c.getLineCounter().getCoveredCount(), 0.0);
+ assertEquals(1, c.getClassCounter().getTotalCount());
+ assertEquals(1, c.getClassCounter().getCoveredCount());
+ assertEquals(1, c.getMethodCounter().getTotalCount());
+ assertEquals(1, c.getMethodCounter().getCoveredCount());
+ assertEquals(3, c.getLineCounter().getTotalCount());
+ assertEquals(3, c.getLineCounter().getCoveredCount());
final Collection<MethodCoverage> methods = c.getMethods();
- assertEquals(1, methods.size(), 1.0);
+ assertEquals(1, methods.size());
MethodCoverage m = methods.iterator().next();
assertEquals("doit", m.getName());
assertEquals("()V", m.getDesc());
- assertEquals(1, m.getMethodCounter().getTotalCount(), 0.0);
- assertEquals(1, m.getMethodCounter().getCoveredCount(), 0.0);
- assertEquals(3, m.getLineCounter().getTotalCount(), 0.0);
- assertEquals(3, m.getLineCounter().getCoveredCount(), 0.0);
+ assertEquals(1, m.getMethodCounter().getTotalCount());
+ assertEquals(1, m.getMethodCounter().getCoveredCount());
+ assertEquals(3, m.getLineCounter().getTotalCount());
+ assertEquals(3, m.getLineCounter().getCoveredCount());
}
@Test
@@ -113,52 +113,52 @@ public class CoverageBuilderTest {
@Test(expected = IllegalStateException.class)
public void testDuplicateClassName() {
MethodCoverage method = new MethodCoverage("doit", "()V", null);
- method.addInsn(false, 3);
+ method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
addClass(123L, "Sample", null, method);
method = new MethodCoverage("doit", "()V", null);
- method.addInsn(false, 3);
+ method.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
addClass(345L, "Sample", null, method);
}
@Test
public void testCreateSourceFile() {
final MethodCoverage method1 = new MethodCoverage("doit", "()V", null);
- method1.addInsn(false, 3);
+ method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
addClass(123L, "Sample", "Sample.java", method1);
final MethodCoverage method2 = new MethodCoverage("doit", "()V", null);
- method2.addInsn(false, 6);
+ method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
addClass(234L, "Second", "Sample.java", method2);
final Collection<SourceFileCoverage> sourcefiles = coverageBuilder
.getSourceFiles();
- assertEquals(1, sourcefiles.size(), 1.0);
+ assertEquals(1, sourcefiles.size());
SourceFileCoverage s = sourcefiles.iterator().next();
- assertEquals(2, s.getClassCounter().getTotalCount(), 0.0);
- assertEquals(0, s.getClassCounter().getCoveredCount(), 0.0);
+ assertEquals(2, s.getClassCounter().getTotalCount());
+ assertEquals(0, s.getClassCounter().getCoveredCount());
}
@Test
public void testGetBundle() {
final MethodCoverage method1 = new MethodCoverage("doit", "()V", null);
- method1.addInsn(false, 3);
+ method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
addClass(1, "org/jacoco/examples/Sample1", null, method1);
final MethodCoverage method2 = new MethodCoverage("doit", "()V", null);
- method2.addInsn(false, 6);
+ method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
addClass(2, "org/jacoco/examples/Sample2", null, method2);
final MethodCoverage method3 = new MethodCoverage("doit", "()V", null);
- method3.addInsn(false, 1);
+ method3.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
addClass(3, "Sample3", null, method3);
BundleCoverage bundle = coverageBuilder.getBundle("testbundle");
assertEquals("testbundle", bundle.getName());
final Collection<PackageCoverage> packages = bundle.getPackages();
- assertEquals(2, packages.size(), 0.0);
+ assertEquals(2, packages.size());
Map<String, PackageCoverage> packagesByName = new HashMap<String, PackageCoverage>();
for (PackageCoverage p : packages) {
packagesByName.put(p.getName(), p);
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
index 4e507e6e..5ed6fed7 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
@@ -17,8 +17,6 @@ import static org.jacoco.core.analysis.ICoverageNode.CounterEntity.INSTRUCTION;
import static org.jacoco.core.analysis.ICoverageNode.CounterEntity.LINE;
import static org.jacoco.core.analysis.ICoverageNode.CounterEntity.METHOD;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import java.util.Arrays;
@@ -35,42 +33,26 @@ public class CoverageNodeImplTest {
@Test
public void testProperties() {
- ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "sample",
- false);
+ ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "sample");
assertEquals(ElementType.GROUP, node.getElementType());
assertEquals("sample", node.getName());
}
@Test
- public void testInitWithoutLines() {
- ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "sample",
- false);
+ public void testInit() {
+ ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "sample");
assertEquals(CounterImpl.COUNTER_0_0, node.getBranchCounter());
assertEquals(CounterImpl.COUNTER_0_0, node.getInstructionCounter());
assertEquals(CounterImpl.COUNTER_0_0, node.getLineCounter());
assertEquals(CounterImpl.COUNTER_0_0, node.getMethodCounter());
assertEquals(CounterImpl.COUNTER_0_0, node.getClassCounter());
- assertNull(node.getLines());
}
@Test
- public void testInitWithLines() {
- ICoverageNode node = new CoverageNodeImpl(ElementType.CLASS, "Sample",
- true);
- assertEquals(CounterImpl.COUNTER_0_0, node.getBranchCounter());
- assertEquals(CounterImpl.COUNTER_0_0, node.getInstructionCounter());
- assertEquals(CounterImpl.COUNTER_0_0, node.getLineCounter());
- assertEquals(CounterImpl.COUNTER_0_0, node.getMethodCounter());
- assertEquals(CounterImpl.COUNTER_0_0, node.getClassCounter());
- assertNotNull(node.getLines());
- }
-
- @Test
- public void testIncrementWithoutLines() {
+ public void testIncrement() {
CoverageNodeImpl parent = new CoverageNodeImpl(ElementType.GROUP,
- "sample", false);
- ICoverageNode child = new CoverageNodeImpl(ElementType.GROUP, "sample",
- false) {
+ "sample");
+ ICoverageNode child = new CoverageNodeImpl(ElementType.GROUP, "sample") {
{
instructionCounter = CounterImpl.getInstance(1, 41);
branchCounter = CounterImpl.getInstance(10, 15);
@@ -95,47 +77,15 @@ public class CoverageNodeImplTest {
}
@Test
- public void testIncrementWithLines() {
- CoverageNodeImpl node = new CoverageNodeImpl(ElementType.CLASS,
- "Sample", true);
- ICoverageNode child = new CoverageNodeImpl(ElementType.CLASS, "Sample",
- true) {
- {
- instructionCounter = CounterImpl.getInstance(1, 41);
- branchCounter = CounterImpl.getInstance(10, 15);
- lines.incrementInsn(1, false);
- lines.incrementInsn(2, false);
- lines.incrementInsn(3, true);
- lines.incrementInsn(4, true);
- methodCounter = CounterImpl.getInstance(1, 21);
- classCounter = CounterImpl.getInstance(1, 11);
- }
- };
- node.increment(child);
- assertEquals(CounterImpl.getInstance(1, 41),
- node.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(10, 15), node.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 21), node.getMethodCounter());
- assertEquals(CounterImpl.getInstance(1, 11), node.getClassCounter());
- assertEquals(CounterImpl.getInstance(2, 2), node.getLineCounter());
- assertEquals(ILines.NOT_COVERED, node.getLines().getStatus(1), 0.0);
- assertEquals(ILines.NOT_COVERED, node.getLines().getStatus(2), 0.0);
- assertEquals(ILines.FULLY_COVERED, node.getLines().getStatus(3), 0.0);
- assertEquals(ILines.FULLY_COVERED, node.getLines().getStatus(4), 0.0);
- }
-
- @Test
public void testIncrementCollection() {
CoverageNodeImpl parent = new CoverageNodeImpl(ElementType.GROUP,
- "sample", false);
- ICoverageNode child1 = new CoverageNodeImpl(ElementType.GROUP,
- "sample", false) {
+ "sample");
+ ICoverageNode child1 = new CoverageNodeImpl(ElementType.GROUP, "sample") {
{
branchCounter = CounterImpl.getInstance(5, 2);
}
};
- ICoverageNode child2 = new CoverageNodeImpl(ElementType.GROUP,
- "sample", false) {
+ ICoverageNode child2 = new CoverageNodeImpl(ElementType.GROUP, "sample") {
{
branchCounter = CounterImpl.getInstance(3, 3);
}
@@ -145,39 +95,8 @@ public class CoverageNodeImplTest {
}
@Test
- public void testGetPlainCopyWithLines() {
- ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "sample",
- true) {
- {
- classCounter = CounterImpl.getInstance(0, 1);
- methodCounter = CounterImpl.getInstance(0, 2);
- branchCounter = CounterImpl.getInstance(0, 3);
- instructionCounter = CounterImpl.getInstance(0, 4);
- lines.incrementInsn(1, true);
- lines.incrementInsn(2, true);
- lines.incrementInsn(3, true);
- lines.incrementInsn(4, true);
- lines.incrementInsn(5, true);
- }
- };
- ICoverageNode copy = node.getPlainCopy();
- assertEquals(ElementType.GROUP, copy.getElementType());
- assertEquals("sample", copy.getName());
- assertEquals(CounterImpl.getInstance(0, 1), copy.getClassCounter());
- assertEquals(CounterImpl.getInstance(0, 2), copy.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 3), copy.getBranchCounter());
- assertEquals(CounterImpl.getInstance(0, 4),
- copy.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(0, 5), copy.getLineCounter());
- assertEquals(1, copy.getLines().getFirstLine(), 0.0);
- assertEquals(5, copy.getLines().getLastLine(), 0.0);
- assertEquals(ILines.FULLY_COVERED, copy.getLines().getStatus(3), 0.0);
- }
-
- @Test
- public void testGetPlainCopyWithoutLines() {
- ICoverageNode node = new CoverageNodeImpl(ElementType.CLASS, "Sample",
- false) {
+ public void testGetPlainCopy() {
+ ICoverageNode node = new CoverageNodeImpl(ElementType.CLASS, "Sample") {
{
classCounter = CounterImpl.getInstance(1, 1);
methodCounter = CounterImpl.getInstance(2, 2);
@@ -195,13 +114,11 @@ public class CoverageNodeImplTest {
assertEquals(CounterImpl.getInstance(4, 4),
copy.getInstructionCounter());
assertEquals(CounterImpl.getInstance(5, 5), copy.getLineCounter());
- assertNull(copy.getLines());
}
@Test
public void testToString() {
- CoverageNodeImpl node = new CoverageNodeImpl(ElementType.CLASS, "Test",
- false);
+ CoverageNodeImpl node = new CoverageNodeImpl(ElementType.CLASS, "Test");
assertEquals("Test [CLASS]", node.toString());
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/LineImplTest.java
index 90ae6816..8ee4f8f4 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/LineImplTest.java
@@ -9,13 +9,14 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.internal.analysis;
+package org.jacoco.core.analysis;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.jacoco.core.analysis.CounterImpl;
import org.jacoco.core.analysis.ILine;
+import org.jacoco.core.analysis.LineImpl;
import org.junit.Before;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/LinesImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/LinesImplTest.java
deleted file mode 100644
index 10ca93b4..00000000
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/LinesImplTest.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.analysis;
-
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NOT_COVERED;
-import static org.jacoco.core.analysis.ILines.NO_CODE;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-/**
- * Unit tests for {@link LinesImpl}.
- *
- * @author Marc R. Hoffmann
- * @version $qualified.bundle.version$
- */
-public class LinesImplTest {
-
- @Test
- public void testEmpty() {
- final ILines c = new LinesImpl();
- assertEquals(0, c.getTotalCount());
- assertEquals(0, c.getCoveredCount());
- assertEquals(-1, c.getFirstLine());
- assertEquals(-1, c.getLastLine());
- assertEquals(NO_CODE, c.getStatus(5));
- assertEquals(0, c.getTotalBranches(5));
- assertEquals(0, c.getMissedBranches(5));
- assertEquals(0, c.getCoveredBranches(5));
- }
-
- @Test
- public void testInitMissed() {
- final LinesImpl c = createNotCovered(5, 7, 10);
- assertEquals(3, c.getTotalCount());
- assertEquals(0, c.getCoveredCount());
- assertEquals(5, c.getFirstLine());
- assertEquals(10, c.getLastLine());
- assertEquals(NO_CODE, c.getStatus(4));
- assertEquals(NOT_COVERED, c.getStatus(5));
- assertEquals(NO_CODE, c.getStatus(6));
- assertEquals(NOT_COVERED, c.getStatus(7));
- assertEquals(NO_CODE, c.getStatus(8));
- assertEquals(NO_CODE, c.getStatus(9));
- assertEquals(NOT_COVERED, c.getStatus(10));
- assertEquals(NO_CODE, c.getStatus(11));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testInitCovered() {
- final LinesImpl c = createFullyCovered(5, 7, 10);
- assertEquals(3, c.getTotalCount());
- assertEquals(3, c.getCoveredCount());
- assertEquals(5, c.getFirstLine());
- assertEquals(10, c.getLastLine());
- assertEquals(NO_CODE, c.getStatus(4));
- assertEquals(FULLY_COVERED, c.getStatus(5));
- assertEquals(NO_CODE, c.getStatus(6));
- assertEquals(FULLY_COVERED, c.getStatus(7));
- assertEquals(NO_CODE, c.getStatus(8));
- assertEquals(NO_CODE, c.getStatus(9));
- assertEquals(FULLY_COVERED, c.getStatus(10));
- assertEquals(NO_CODE, c.getStatus(11));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement1() {
- // 1: N + N = N
- // 2: N + . = N
- // 3: . + . = .
- // 4: . + N = N
- // 5: N + N = N
- // ============
- // 4 total, 0 covered
- final LinesImpl c = createNotCovered(1, 2, 5);
- c.increment(createNotCovered(1, 4, 5));
- assertEquals(4, c.getTotalCount());
- assertEquals(0, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(5, c.getLastLine());
- assertEquals(NOT_COVERED, c.getStatus(1));
- assertEquals(NOT_COVERED, c.getStatus(2));
- assertEquals(NO_CODE, c.getStatus(3));
- assertEquals(NOT_COVERED, c.getStatus(4));
- assertEquals(NOT_COVERED, c.getStatus(5));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement2() {
- // 1: F + F = F
- // 2: F + . = F
- // 3: . + F = F
- // 4: F + F = F
- // ============
- // 4 total, 4 covered
- final LinesImpl c = createFullyCovered(1, 2, 4);
- c.increment(createFullyCovered(1, 3, 4));
- assertEquals(4, c.getTotalCount());
- assertEquals(4, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(4, c.getLastLine());
- assertEquals(FULLY_COVERED, c.getStatus(1));
- assertEquals(FULLY_COVERED, c.getStatus(2));
- assertEquals(FULLY_COVERED, c.getStatus(3));
- assertEquals(FULLY_COVERED, c.getStatus(4));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement3() {
- // 1: F + N = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createFullyCovered(1);
- c.increment(createNotCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement4() {
- // 1: N + F = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createNotCovered(1);
- c.increment(createFullyCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement5() {
- // 1: P + P = P
- // 2: P + . = P
- // 3: . + . = .
- // 4: . + P = P
- // 5: P + P = P
- // ============
- // 4 total, 4 covered
- final LinesImpl c = createPartlyCovered(1, 2, 5);
- c.increment(createPartlyCovered(1, 4, 5));
- assertEquals(4, c.getTotalCount());
- assertEquals(4, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(5, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(PARTLY_COVERED, c.getStatus(2));
- assertEquals(NO_CODE, c.getStatus(3));
- assertEquals(PARTLY_COVERED, c.getStatus(4));
- assertEquals(PARTLY_COVERED, c.getStatus(5));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement6() {
- // 1: P + N = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createPartlyCovered(1);
- c.increment(createNotCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement7() {
- // 1: N + P = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createNotCovered(1);
- c.increment(createPartlyCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement8() {
- // 1: P + F = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createPartlyCovered(1);
- c.increment(createFullyCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrement9() {
- // 1: F + P = P
- // ============
- // 1 total, 1 covered
- final LinesImpl c = createFullyCovered(1);
- c.increment(createPartlyCovered(1));
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(PARTLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncrementEmpty() {
- final LinesImpl c = createFullyCovered(1);
- c.increment(new LinesImpl());
- assertEquals(1, c.getTotalCount());
- assertEquals(1, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(1, c.getLastLine());
- assertEquals(FULLY_COVERED, c.getStatus(1));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncreaseLeft() {
- // 1: . + F = F
- // 2: F + F = F
- // 3: F + F = F
- // ============
- // 3 total, 3 covered
- final LinesImpl c = createFullyCovered(2, 3);
- c.increment(createFullyCovered(1, 2, 3));
- assertEquals(3, c.getTotalCount());
- assertEquals(3, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(3, c.getLastLine());
- assertEquals(FULLY_COVERED, c.getStatus(1));
- assertEquals(FULLY_COVERED, c.getStatus(2));
- assertEquals(FULLY_COVERED, c.getStatus(3));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncreaseRight() {
- // 1: F + F = F
- // 2: F + F = F
- // 3: . + F = F
- // ============
- // 3 total, 3 covered
- final LinesImpl c = createFullyCovered(1, 2);
- c.increment(createFullyCovered(1, 2, 3));
- assertEquals(3, c.getTotalCount());
- assertEquals(3, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(3, c.getLastLine());
- assertEquals(FULLY_COVERED, c.getStatus(1));
- assertEquals(FULLY_COVERED, c.getStatus(2));
- assertEquals(FULLY_COVERED, c.getStatus(3));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- @Test
- public void testIncreaseBoth() {
- // 1: . + F = F
- // 2: F + F = F
- // 3: . + F = F
- // ============
- // 3 total, 3 covered
- final LinesImpl c = createFullyCovered(2);
- c.increment(createFullyCovered(1, 2, 3));
- assertEquals(3, c.getTotalCount());
- assertEquals(3, c.getCoveredCount());
- assertEquals(1, c.getFirstLine());
- assertEquals(3, c.getLastLine());
- assertEquals(FULLY_COVERED, c.getStatus(1));
- assertEquals(FULLY_COVERED, c.getStatus(2));
- assertEquals(FULLY_COVERED, c.getStatus(3));
- assertEquals(0, c.getTotalBranches(0));
- assertEquals(0, c.getMissedBranches(0));
- assertEquals(0, c.getCoveredBranches(0));
- }
-
- private LinesImpl createNotCovered(final int... lines) {
- final LinesImpl c = new LinesImpl();
- for (int l : lines) {
- c.incrementInsn(l, false);
- }
- return c;
- }
-
- private LinesImpl createFullyCovered(final int... lines) {
- final LinesImpl c = new LinesImpl();
- for (int l : lines) {
- c.incrementInsn(l, true);
- }
- return c;
- }
-
- private LinesImpl createPartlyCovered(final int... lines) {
- final LinesImpl c = new LinesImpl();
- for (int l : lines) {
- c.incrementInsn(l, false);
- c.incrementInsn(l, true);
- }
- return c;
- }
-
- @Test
- public void testIncrementBranches1() {
- final LinesImpl c = new LinesImpl();
- c.incrementBranches(5, 3, 5);
- assertEquals(5, c.getFirstLine());
- assertEquals(5, c.getLastLine());
-
- assertEquals(0, c.getTotalBranches(4));
- assertEquals(0, c.getCoveredBranches(4));
- assertEquals(0, c.getMissedBranches(4));
-
- assertEquals(8, c.getTotalBranches(5));
- assertEquals(3, c.getCoveredBranches(5));
- assertEquals(5, c.getMissedBranches(5));
- assertEquals(NO_CODE, c.getStatus(5));
-
- assertEquals(0, c.getTotalBranches(6));
- assertEquals(0, c.getCoveredBranches(6));
- assertEquals(0, c.getMissedBranches(6));
- }
-
- @Test
- public void testIncrementBranches2() {
- final LinesImpl c = new LinesImpl();
- c.incrementBranches(5, 3, 5);
-
- final LinesImpl c2 = new LinesImpl();
- c2.incrementBranches(50, 30, 5);
-
- c.increment(c2);
-
- assertEquals(5, c.getFirstLine());
- assertEquals(5, c.getLastLine());
- assertEquals(88, c.getTotalBranches(5));
- assertEquals(33, c.getCoveredBranches(5));
- assertEquals(55, c.getMissedBranches(5));
- assertEquals(NO_CODE, c.getStatus(5));
- }
-
- @Test
- public void testIncrementBranchesOverflow() {
- final LinesImpl c = new LinesImpl();
- c.incrementBranches(1000, 0, 5);
-
- assertEquals(5, c.getFirstLine());
- assertEquals(5, c.getLastLine());
- assertEquals(127, c.getTotalBranches(5));
- assertEquals(0, c.getCoveredBranches(5));
- assertEquals(127, c.getMissedBranches(5));
- assertEquals(NO_CODE, c.getStatus(5));
- }
-
-}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodAnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodAnalyzerTest.java
index d1f84a9d..e22c1814 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodAnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodAnalyzerTest.java
@@ -507,21 +507,13 @@ public class MethodAnalyzerTest implements IProbeIdGenerator {
private void assertLine(int nr, int insnMissed, int insnCovered,
int branchesMissed, int branchesCovered) {
- final ILines lines = result.getLines();
-
- final int status;
- if (insnMissed == 0) {
- status = insnCovered == 0 ? ILines.NO_CODE : ILines.FULLY_COVERED;
- } else {
- status = insnCovered == 0 ? ILines.NOT_COVERED
- : ILines.PARTLY_COVERED;
- }
-
- assertEquals("Status in line " + nr, status, lines.getStatus(nr));
- assertEquals("Missed branches in line " + nr, branchesMissed,
- lines.getMissedBranches(nr));
- assertEquals("Covered branches in line " + nr, branchesCovered,
- lines.getCoveredBranches(nr));
+ final ILine line = result.getLine(nr);
+ assertEquals("Instructions in line " + nr,
+ CounterImpl.getInstance(insnMissed, insnCovered),
+ line.getInstructionCounter());
+ assertEquals("Branches in line " + nr,
+ CounterImpl.getInstance(branchesMissed, branchesCovered),
+ line.getBranchCounter());
}
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodCoverageTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodCoverageTest.java
index 912a3792..bbb40441 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodCoverageTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/MethodCoverageTest.java
@@ -26,97 +26,44 @@ public class MethodCoverageTest {
@Test
public void testProperties() {
// Example: java.util.Collections.emptySet()
- MethodCoverage data = new MethodCoverage("emptySet",
+ MethodCoverage node = new MethodCoverage("emptySet",
"()Ljava/util/Set;",
"<T:Ljava/lang/Object;>()Ljava/util/Set<TT;>;");
- assertEquals(ICoverageNode.ElementType.METHOD, data.getElementType());
- assertEquals("emptySet", data.getName());
- assertEquals("()Ljava/util/Set;", data.getDesc());
+ assertEquals(ICoverageNode.ElementType.METHOD, node.getElementType());
+ assertEquals("emptySet", node.getName());
+ assertEquals("()Ljava/util/Set;", node.getDesc());
assertEquals("<T:Ljava/lang/Object;>()Ljava/util/Set<TT;>;",
- data.getSignature());
+ node.getSignature());
}
@Test
public void testEmptyMethod() {
- ICoverageNode data = new MethodCoverage("sample", "()V", null);
+ ICoverageNode node = new MethodCoverage("sample", "()V", null);
- assertEquals(CounterImpl.getInstance(0, 0), data.getLineCounter());
+ assertEquals(CounterImpl.getInstance(0, 0), node.getLineCounter());
assertEquals(CounterImpl.getInstance(0, 0),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 0), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
+ node.getInstructionCounter());
+ assertEquals(CounterImpl.getInstance(0, 0), node.getBranchCounter());
+ assertEquals(CounterImpl.getInstance(1, 0), node.getMethodCounter());
+ assertEquals(CounterImpl.getInstance(0, 0), node.getClassCounter());
}
@Test
- public void testInstructionMissed() {
- MethodCoverage data = new MethodCoverage("sample", "()V", null);
- data.addInsn(false, 0);
- data.addInsn(false, 0);
+ public void testIncrementMissed() {
+ MethodCoverage node = new MethodCoverage("sample", "()V", null);
+ node.increment(CounterImpl.getInstance(25, 0), CounterImpl.COUNTER_0_0,
+ 3);
- assertEquals(CounterImpl.getInstance(1, 0), data.getLineCounter());
- assertEquals(CounterImpl.getInstance(2, 0),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 0), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
+ assertEquals(CounterImpl.getInstance(1, 0), node.getMethodCounter());
}
@Test
- public void testInstructionCovered() {
- MethodCoverage data = new MethodCoverage("sample", "()V", null);
- data.addInsn(true, 0);
- data.addInsn(false, 0);
+ public void testIncrementCovered() {
+ MethodCoverage node = new MethodCoverage("sample", "()V", null);
+ node.increment(CounterImpl.getInstance(12, 13),
+ CounterImpl.COUNTER_0_0, 3);
- assertEquals(CounterImpl.getInstance(0, 1), data.getLineCounter());
- assertEquals(CounterImpl.getInstance(1, 1),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(0, 1), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
- }
-
- @Test
- public void testInstructionNoLine() {
- MethodCoverage data = new MethodCoverage("sample", "()V", null);
- data.addInsn(false, MethodCoverage.UNKNOWN_LINE);
-
- assertEquals(CounterImpl.getInstance(0, 0), data.getLineCounter());
- assertEquals(CounterImpl.getInstance(1, 0),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 0), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
- }
-
- @Test
- public void testBranches() {
- MethodCoverage data = new MethodCoverage("sample", "()V", null);
- data.addBranches(4, 3, 0);
-
- assertEquals(CounterImpl.getInstance(0, 0), data.getLineCounter());
- assertEquals(CounterImpl.getInstance(0, 0),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(4, 3), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 0), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
- assertEquals(7, data.getLines().getTotalBranches(0));
- assertEquals(3, data.getLines().getCoveredBranches(0));
- }
-
- @Test
- public void testBranchesNoLine() {
- MethodCoverage data = new MethodCoverage("sample", "()V", null);
- data.addBranches(4, 3, MethodCoverage.UNKNOWN_LINE);
-
- assertEquals(CounterImpl.getInstance(0, 0), data.getLineCounter());
- assertEquals(CounterImpl.getInstance(0, 0),
- data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(4, 3), data.getBranchCounter());
- assertEquals(CounterImpl.getInstance(1, 0), data.getMethodCounter());
- assertEquals(CounterImpl.getInstance(0, 0), data.getClassCounter());
- assertEquals(0, data.getLines().getTotalBranches(0));
- assertEquals(0, data.getLines().getCoveredBranches(0));
+ assertEquals(CounterImpl.getInstance(0, 1), node.getMethodCounter());
}
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
index da178d94..9a56ab41 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
@@ -66,14 +66,14 @@ public class NodeComparatorTest {
private static final class MockBlockData extends CoverageNodeImpl {
MockBlockData(int total) {
- super(GROUP, "mock", false);
+ super(GROUP, "mock");
instructionCounter = CounterImpl.getInstance(total, 0);
}
}
private static final class MockBlockLineData extends CoverageNodeImpl {
MockBlockLineData(int totalInstruction, int totalLine) {
- super(GROUP, "mock", false);
+ super(GROUP, "mock");
instructionCounter = CounterImpl.getInstance(totalInstruction, 0);
lineCounter = CounterImpl.getInstance(totalLine, 0);
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/PackageCoverageTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/PackageCoverageTest.java
index 23d165d6..9b0f102a 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/PackageCoverageTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/PackageCoverageTest.java
@@ -12,7 +12,6 @@
package org.jacoco.core.analysis;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
import java.util.Collection;
import java.util.Collections;
@@ -41,7 +40,6 @@ public class PackageCoverageTest {
assertEquals("org/jacoco/test", data.getName());
assertEquals(classes, data.getClasses());
assertEquals(sourceFiles, data.getSourceFiles());
- assertNull(data.getLines());
}
@Test
@@ -55,7 +53,6 @@ public class PackageCoverageTest {
methodCounter = CounterImpl.getInstance(9, 0);
branchCounter = CounterImpl.getInstance(9, 0);
instructionCounter = CounterImpl.getInstance(9, 0);
- lines.incrementInsn(1, false);
}
};
classnode.setSourceFileName("Sample.java");
@@ -67,11 +64,6 @@ public class PackageCoverageTest {
methodCounter = CounterImpl.getInstance(2, 0);
branchCounter = CounterImpl.getInstance(3, 0);
instructionCounter = CounterImpl.getInstance(4, 0);
- lines.incrementInsn(1, false);
- lines.incrementInsn(2, false);
- lines.incrementInsn(3, false);
- lines.incrementInsn(4, false);
- lines.incrementInsn(5, false);
}
};
PackageCoverage data = new PackageCoverage("org/jacoco/test",
@@ -82,7 +74,6 @@ public class PackageCoverageTest {
assertEquals(CounterImpl.getInstance(3, 0), data.getBranchCounter());
assertEquals(CounterImpl.getInstance(4, 0),
data.getInstructionCounter());
- assertEquals(CounterImpl.getInstance(5, 0), data.getLineCounter());
}
@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/SourceNodeImplTest.java
index 0f98d994..4e821e9f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/SourceNodeImplTest.java
@@ -9,11 +9,12 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.internal.analysis;
+package org.jacoco.core.analysis;
import static org.junit.Assert.assertEquals;
import org.jacoco.core.analysis.CounterImpl;
+import org.jacoco.core.analysis.SourceNodeImpl;
import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.analysis.ISourceNode;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BlocksBeforeSuperConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BlocksBeforeSuperConstructorTest.java
index e6bf176b..bf12728c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BlocksBeforeSuperConstructorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BlocksBeforeSuperConstructorTest.java
@@ -11,7 +11,7 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
+import static org.jacoco.core.analysis.ILine.PARTLY_COVERED;
import org.jacoco.core.test.validation.targets.Target10;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
index f35e27ec..c388468f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
@@ -11,8 +11,8 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.PARTLY_COVERED;
import org.jacoco.core.test.validation.targets.Target02;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java
index 5a480f51..74e6d7cd 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java
@@ -11,8 +11,8 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NO_CODE;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NO_CODE;
import org.jacoco.core.test.validation.targets.Target05;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
index 027fe7d0..6e0d3bb0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
@@ -11,9 +11,9 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NOT_COVERED;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NOT_COVERED;
+import static org.jacoco.core.analysis.ILine.PARTLY_COVERED;
import org.jacoco.core.test.validation.targets.Target01;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
index 0081ab78..dc0a6c3c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
@@ -11,9 +11,9 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NOT_COVERED;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NOT_COVERED;
+import static org.jacoco.core.analysis.ILine.PARTLY_COVERED;
import org.jacoco.core.test.validation.targets.Target03;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java
index 4b49e731..39e14f4c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java
@@ -11,9 +11,9 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NOT_COVERED;
-import static org.jacoco.core.analysis.ILines.PARTLY_COVERED;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NOT_COVERED;
+import static org.jacoco.core.analysis.ILine.PARTLY_COVERED;
import org.jacoco.core.test.validation.targets.Target09;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java
index 2422303a..e7c02a53 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java
@@ -11,7 +11,7 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
import org.jacoco.core.test.validation.targets.Target06;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java
index bf2a5f07..ac04665f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java
@@ -11,8 +11,8 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NO_CODE;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NO_CODE;
import org.jacoco.core.test.validation.targets.Target08;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java
index 5c2d8eab..cde9b433 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java
@@ -11,8 +11,8 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.FULLY_COVERED;
-import static org.jacoco.core.analysis.ILines.NO_CODE;
+import static org.jacoco.core.analysis.ILine.FULLY_COVERED;
+import static org.jacoco.core.analysis.ILine.NO_CODE;
import org.jacoco.core.test.validation.targets.Target04;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java
index 94ab1616..2df747bf 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java
@@ -11,8 +11,8 @@
*******************************************************************************/
package org.jacoco.core.test.validation;
-import static org.jacoco.core.analysis.ILines.NOT_COVERED;
-import static org.jacoco.core.analysis.ILines.NO_CODE;
+import static org.jacoco.core.analysis.ILine.NOT_COVERED;
+import static org.jacoco.core.analysis.ILine.NO_CODE;
import org.jacoco.core.test.validation.targets.Target07;
import org.junit.Test;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
index 6f4373c9..aa37950f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
@@ -17,8 +17,10 @@ import java.util.Collection;
import org.jacoco.core.analysis.Analyzer;
import org.jacoco.core.analysis.ClassCoverage;
+import org.jacoco.core.analysis.CounterImpl;
import org.jacoco.core.analysis.CoverageBuilder;
-import org.jacoco.core.analysis.ILines;
+import org.jacoco.core.analysis.ILine;
+import org.jacoco.core.analysis.LineImpl;
import org.jacoco.core.analysis.SourceFileCoverage;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.instr.Instrumenter;
@@ -40,10 +42,10 @@ public abstract class ValidationTestBase {
private static final String[] STATUS_NAME = new String[4];
{
- STATUS_NAME[ILines.NO_CODE] = "NO_CODE";
- STATUS_NAME[ILines.NOT_COVERED] = "NOT_COVERED";
- STATUS_NAME[ILines.FULLY_COVERED] = "FULLY_COVERED";
- STATUS_NAME[ILines.PARTLY_COVERED] = "PARTLY_COVERED";
+ STATUS_NAME[ILine.NO_CODE] = "NO_CODE";
+ STATUS_NAME[ILine.NOT_COVERED] = "NOT_COVERED";
+ STATUS_NAME[ILine.FULLY_COVERED] = "FULLY_COVERED";
+ STATUS_NAME[ILine.PARTLY_COVERED] = "PARTLY_COVERED";
}
protected final Class<?> target;
@@ -52,8 +54,6 @@ public abstract class ValidationTestBase {
protected SourceFileCoverage sourceCoverage;
- protected ILines lineCoverage;
-
protected Source source;
protected ValidationTestBase(final Class<?> target) {
@@ -95,7 +95,6 @@ public abstract class ValidationTestBase {
final Collection<SourceFileCoverage> files = builder.getSourceFiles();
assertEquals(1, files.size(), 0.0);
sourceCoverage = files.iterator().next();
- lineCoverage = sourceCoverage.getLines();
}
protected void assertLine(final String tag, final int status) {
@@ -105,14 +104,20 @@ public abstract class ValidationTestBase {
protected void assertLine(final String tag, final int status,
final int missedBranches, final int coveredBranches) {
final int nr = source.getLineNumber(tag);
- final String line = source.getLine(nr);
- String msg = String.format("L%s: %s", Integer.valueOf(nr), line);
- assertEquals(msg, STATUS_NAME[status],
- STATUS_NAME[lineCoverage.getStatus(nr)]);
- assertEquals(msg + " missed branches", missedBranches,
- lineCoverage.getMissedBranches(nr));
- assertEquals(msg + " covered branches", coveredBranches,
- lineCoverage.getCoveredBranches(nr));
+ final LineImpl line = sourceCoverage.getLine(nr);
+ String msg = String.format("L%s: %s", Integer.valueOf(nr),
+ source.getLine(nr));
+ int insnStatus = ILine.NO_CODE;
+ if (line.getInstructionCounter().getMissedCount() > 0) {
+ insnStatus |= ILine.NOT_COVERED;
+ }
+ if (line.getInstructionCounter().getCoveredCount() > 0) {
+ insnStatus |= ILine.FULLY_COVERED;
+ }
+ assertEquals(msg, STATUS_NAME[status], STATUS_NAME[insnStatus]);
+ assertEquals(msg + " branches",
+ CounterImpl.getInstance(missedBranches, coveredBranches),
+ line.getBranchCounter());
}
}
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/BundleCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/BundleCoverage.java
index b93c07a4..ca413fb6 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/BundleCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/BundleCoverage.java
@@ -39,7 +39,7 @@ public class BundleCoverage extends CoverageNodeImpl {
*/
public BundleCoverage(final String name,
final Collection<PackageCoverage> packages) {
- super(ElementType.BUNDLE, name, false);
+ super(ElementType.BUNDLE, name);
this.packages = packages;
increment(packages);
}
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ClassCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/ClassCoverage.java
index 2aa15212..86881d9d 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ClassCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ClassCoverage.java
@@ -14,13 +14,14 @@ package org.jacoco.core.analysis;
import java.util.ArrayList;
import java.util.Collection;
+
/**
* Coverage data of a single class.
*
* @author Marc R. Hoffmann
* @version $qualified.bundle.version$
*/
-public class ClassCoverage extends CoverageNodeImpl {
+public class ClassCoverage extends SourceNodeImpl implements ISourceNode {
private final long id;
private final String signature;
@@ -46,7 +47,7 @@ public class ClassCoverage extends CoverageNodeImpl {
public ClassCoverage(final String name, final long id,
final String signature, final String superName,
final String[] interfaces) {
- super(ElementType.CLASS, name, true);
+ super(ElementType.CLASS, name);
this.id = id;
this.signature = signature;
this.superName = superName;
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
index 2225b5c2..ad85455b 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
@@ -40,9 +40,6 @@ public class CoverageNodeImpl implements ICoverageNode {
/** Counter for classes. */
protected CounterImpl classCounter;
- /** Line information if this element has lines. */
- protected final LinesImpl lines;
-
/**
* Creates a new coverage data node.
*
@@ -50,19 +47,15 @@ public class CoverageNodeImpl implements ICoverageNode {
* type of the element represented by this instance
* @param name
* name of this node
- * @param hasLines
- * <code>true</code> id this element has source lines
*/
- public CoverageNodeImpl(final ElementType elementType, final String name,
- final boolean hasLines) {
+ public CoverageNodeImpl(final ElementType elementType, final String name) {
this.elementType = elementType;
this.name = name;
this.branchCounter = CounterImpl.COUNTER_0_0;
this.instructionCounter = CounterImpl.COUNTER_0_0;
this.methodCounter = CounterImpl.COUNTER_0_0;
this.classCounter = CounterImpl.COUNTER_0_0;
- this.lineCounter = hasLines ? null : CounterImpl.COUNTER_0_0;
- this.lines = hasLines ? new LinesImpl() : null;
+ this.lineCounter = CounterImpl.COUNTER_0_0;
}
/**
@@ -77,11 +70,7 @@ public class CoverageNodeImpl implements ICoverageNode {
branchCounter = branchCounter.increment(child.getBranchCounter());
methodCounter = methodCounter.increment(child.getMethodCounter());
classCounter = classCounter.increment(child.getClassCounter());
- if (lines == null) {
- lineCounter = lineCounter.increment(child.getLineCounter());
- } else {
- lines.increment(child.getLines());
- }
+ lineCounter = lineCounter.increment(child.getLineCounter());
}
/**
@@ -116,7 +105,7 @@ public class CoverageNodeImpl implements ICoverageNode {
}
public ICounter getLineCounter() {
- return lines != null ? lines : lineCounter;
+ return lineCounter;
}
public ICounter getMethodCounter() {
@@ -143,23 +132,13 @@ public class CoverageNodeImpl implements ICoverageNode {
throw new AssertionError(entity);
}
- public ILines getLines() {
- return lines;
- }
-
public ICoverageNode getPlainCopy() {
- final boolean hasLines = lines != null;
- final CoverageNodeImpl copy = new CoverageNodeImpl(elementType, name,
- hasLines);
+ final CoverageNodeImpl copy = new CoverageNodeImpl(elementType, name);
copy.instructionCounter = CounterImpl.getInstance(instructionCounter);
copy.branchCounter = CounterImpl.getInstance(branchCounter);
copy.methodCounter = CounterImpl.getInstance(methodCounter);
copy.classCounter = CounterImpl.getInstance(classCounter);
- if (hasLines) {
- copy.lines.increment(lines);
- } else {
- copy.lineCounter = CounterImpl.getInstance(lineCounter);
- }
+ copy.lineCounter = CounterImpl.getInstance(lineCounter);
return copy;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
index 6032304f..76d1878a 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
@@ -125,14 +125,6 @@ public interface ICoverageNode {
public ICounter getCounter(CounterEntity entity);
/**
- * Returns the line coverage information if this node represents a source
- * file or a part of a source file.
- *
- * @return line coverage or <code>null</code>
- */
- public ILines getLines();
-
- /**
* Creates a plain copy of this node. While {@link ICoverageNode}
* implementations may contain heavy data structures, the copy returned by
* this method is reduced to the counters only. This helps to save memory
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ILines.java b/org.jacoco.core/src/org/jacoco/core/analysis/ILines.java
deleted file mode 100644
index b237c801..00000000
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ILines.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.analysis;
-
-/**
- * For all elements that are located in a source file and for source files
- * itself individual line coverage is described by this interface.
- *
- * @author Marc R. Hoffmann
- * @version $Revision: 11 $
- */
-public interface ILines extends ICounter {
-
- /** Flag for lines that do not contain code (value is 0x00). */
- public static final byte NO_CODE = 0x00;
-
- /** Flag for lines that are not covered (value is 0x01). */
- public static final byte NOT_COVERED = 0x01;
-
- /** Flag for lines that are fully covered (value is 0x02). */
- public static final byte FULLY_COVERED = 0x02;
-
- /** Flag for lines that are partly covered (value is 0x03). */
- public static final byte PARTLY_COVERED = NOT_COVERED | FULLY_COVERED;
-
- /**
- * The number of the first line coverage information is available for. If no
- * line is yet contained, the method returns -1.
- *
- * @return number of the first line or -1
- */
- public int getFirstLine();
-
- /**
- * The number of the last line coverage information is available for. If no
- * line is yet contained, the method returns -1.
- *
- * @return number of the last line or -1
- */
- public int getLastLine();
-
- /**
- * Returns the instruction coverage status of the given line.
- *
- * @see #NO_CODE
- * @see #NOT_COVERED
- * @see #PARTLY_COVERED
- * @see #FULLY_COVERED
- *
- * @param line
- * number of the line in question
- * @return status of this line
- */
- public byte getStatus(int line);
-
- /**
- * Returns the total number of branches in the given line.
- *
- * @param line
- * number of the line in question
- * @return total number of branches
- */
- public int getTotalBranches(int line);
-
- /**
- * Returns the number of covered branches in the given line.
- *
- * @param line
- * number of the line in question
- * @return number of covered branches
- */
- public int getCoveredBranches(int line);
-
- /**
- * Returns the number of missed branches in the given line.
- *
- * @param line
- * number of the line in question
- * @return number of missed branches
- */
- public int getMissedBranches(int line);
-
-}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java b/org.jacoco.core/src/org/jacoco/core/analysis/LineImpl.java
index 5bf084c2..f04bbf8b 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/LineImpl.java
@@ -9,11 +9,8 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.internal.analysis;
+package org.jacoco.core.analysis;
-import org.jacoco.core.analysis.CounterImpl;
-import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.analysis.ILine;
/**
* {@link ILine} implementation.
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/LinesImpl.java b/org.jacoco.core/src/org/jacoco/core/analysis/LinesImpl.java
deleted file mode 100644
index 063a7cf4..00000000
--- a/org.jacoco.core/src/org/jacoco/core/analysis/LinesImpl.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.analysis;
-
-/**
- * {@link ILines} implementation.
- *
- * @author Marc R. Hoffmann
- * @version $qualified.bundle.version$
- */
-public class LinesImpl extends AbstractCounter implements ILines {
-
- /**
- * Status for each line. Each entry is used as follows:
- *
- * <pre>
- * Bits | 7654321076543210
- * ================================
- * Status | xx
- * Tot. Branches | xxxxxxx
- * Mis. Branches | xxxxxxx
- *
- * </pre>
- */
- private char[] status;
-
- private static final char MASK_STATUS = 0x0003;
- private static final char MASK_TOTBR = 0x01fc;
- private static final char OFFSET_TOTBR = 2;
- private static final char MASK_MISBR = 0xfe00;
- private static final char OFFSET_MISBR = 9;
-
- /** first line number in lines */
- private int offset;
-
- /**
- * Creates an empty line counter.
- */
- public LinesImpl() {
- super(0, 0);
- status = null;
- offset = -1;
- }
-
- private void ensureCapacity(final int first, final int last) {
- if (status == null) {
- offset = first;
- status = new char[last - first + 1];
- } else {
- final int newFirst = Math.min(getFirstLine(), first);
- final int newLast = Math.max(getLastLine(), last);
- final int newLength = newLast - newFirst + 1;
- if (newLength > status.length) {
- final char[] newStatus = new char[newLength];
- System.arraycopy(status, 0, newStatus, offset - newFirst,
- status.length);
- offset = newFirst;
- status = newStatus;
- }
- }
- }
-
- /**
- * Adds a instruction for the given line.
- *
- * @param line
- * line number to add
- * @param covered
- * <code>true</code> if the line is covered
- *
- */
- public void incrementInsn(final int line, final boolean covered) {
- ensureCapacity(line, line);
- final byte newStatus = covered ? FULLY_COVERED : NOT_COVERED;
- increment(line, newStatus, 0, 0);
- }
-
- /**
- * Adds the lines of the given line counter. The states are updated
- * accordingly.
- *
- * @param counter
- * line counter to add
- */
- public void increment(final ILines counter) {
- if (counter.getFirstLine() == -1) {
- return;
- }
- ensureCapacity(counter.getFirstLine(), counter.getLastLine());
- for (int line = counter.getFirstLine(); line <= counter.getLastLine(); line++) {
- increment(line, counter.getStatus(line),
- counter.getTotalBranches(line),
- counter.getMissedBranches(line));
- }
- }
-
- private void increment(final int line, final byte newStatus,
- final int totalBranches, final int missedBranches) {
- final int s = status[line - offset];
- final int oldStatus = s & MASK_STATUS;
- final int oldTotbr = s & MASK_TOTBR;
- final int oldCovbr = s & MASK_MISBR;
- final int newTotbr = Math.min(MASK_TOTBR, oldTotbr
- + (totalBranches << OFFSET_TOTBR));
- final int newCovbr = Math.min(MASK_MISBR, oldCovbr
- + (missedBranches << OFFSET_MISBR));
- status[line - offset] = (char) (oldStatus | newStatus | newTotbr | newCovbr);
- if (newStatus != NO_CODE) {
- if (newStatus == NOT_COVERED) {
- if (oldStatus == NO_CODE) {
- missed++;
- }
- } else {
- if (oldStatus == NO_CODE || oldStatus == NOT_COVERED) {
- covered++;
- }
- if (oldStatus == NOT_COVERED) {
- missed--;
- }
- }
- }
- }
-
- /**
- * Add branches to the given line
- *
- * @param missed
- * number of missed branches to add
- * @param covered
- * number of covered branches to add
- * @param line
- * line to add branches to
- */
- public void incrementBranches(final int missed, final int covered,
- final int line) {
- ensureCapacity(line, line);
- increment(line, NO_CODE, missed + covered, missed);
- }
-
- // === ILineCounter ===
-
- public int getFirstLine() {
- return offset;
- }
-
- public int getLastLine() {
- return status == null ? -1 : (offset + status.length - 1);
- }
-
- public byte getStatus(final int line) {
- if (status == null || line < getFirstLine() || line > getLastLine()) {
- return NO_CODE;
- }
- return (byte) (status[line - offset] & MASK_STATUS);
- }
-
- public int getTotalBranches(final int line) {
- if (status == null || line < getFirstLine() || line > getLastLine()) {
- return 0;
- }
- return (status[line - offset] & MASK_TOTBR) >> OFFSET_TOTBR;
- }
-
- public int getMissedBranches(final int line) {
- if (status == null || line < getFirstLine() || line > getLastLine()) {
- return 0;
- }
- return (status[line - offset] & MASK_MISBR) >> OFFSET_MISBR;
- }
-
- public int getCoveredBranches(final int line) {
- return getTotalBranches(line) - getMissedBranches(line);
- }
-
-}
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/MethodAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/analysis/MethodAnalyzer.java
index f49148fa..f2b22e0b 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/MethodAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/MethodAnalyzer.java
@@ -237,10 +237,11 @@ class MethodAnalyzer implements IMethodProbesVisitor {
for (final Instruction i : instructions) {
final int total = i.getBranches();
final int covered = i.getCoveredBranches();
- coverage.addInsn(covered > 0, i.getLine());
- if (total > 1) {
- coverage.addBranches(total - covered, covered, i.getLine());
- }
+ final ICounter instructions = covered == 0 ? CounterImpl.COUNTER_1_0
+ : CounterImpl.COUNTER_0_1;
+ final ICounter branches = total > 1 ? CounterImpl.getInstance(total
+ - covered, covered) : CounterImpl.COUNTER_0_0;
+ coverage.increment(instructions, branches, i.getLine());
}
}
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/MethodCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/MethodCoverage.java
index bd559b4e..57344090 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/MethodCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/MethodCoverage.java
@@ -11,16 +11,14 @@
*******************************************************************************/
package org.jacoco.core.analysis;
+
/**
* Coverage data of a single method.
*
* @author Marc R. Hoffmann
* @version $qualified.bundle.version$
*/
-public class MethodCoverage extends CoverageNodeImpl {
-
- /** Place holder for unknown lines (no debug information) */
- public static int UNKNOWN_LINE = -1;
+public class MethodCoverage extends SourceNodeImpl {
private final String desc;
@@ -38,47 +36,20 @@ public class MethodCoverage extends CoverageNodeImpl {
*/
public MethodCoverage(final String name, final String desc,
final String signature) {
- super(ElementType.METHOD, name, true);
+ super(ElementType.METHOD, name);
this.desc = desc;
this.signature = signature;
this.methodCounter = CounterImpl.getInstance(false);
}
- /**
- * Adds a single instruction to this method.
- *
- * @param covered
- * <code>true</code> if the instruction was executed
- * @param line
- * source line number of the instruction
- */
- public void addInsn(final boolean covered, final int line) {
- if (line != UNKNOWN_LINE) {
- this.lines.incrementInsn(line, covered);
- }
- this.instructionCounter = this.instructionCounter.increment(CounterImpl
- .getInstance(covered));
- if (covered && this.methodCounter.getCoveredCount() == 0) {
- this.methodCounter = CounterImpl.getInstance(true);
- }
- }
-
- /**
- * Adds a branching point to this method.
- *
- * @param missed
- * number of missed branches
- * @param covered
- * number of covered branches
- * @param line
- * source line number of the branching point
- */
- public void addBranches(final int missed, final int covered, final int line) {
- if (line != UNKNOWN_LINE) {
- this.lines.incrementBranches(missed, covered, line);
+ @Override
+ public void increment(final ICounter instructions, final ICounter branches,
+ final int line) {
+ super.increment(instructions, branches, line);
+ if (instructions.getCoveredCount() > 0
+ && this.methodCounter.getCoveredCount() == 0) {
+ this.methodCounter = CounterImpl.COUNTER_0_1;
}
- this.branchCounter = this.branchCounter.increment(CounterImpl
- .getInstance(missed, covered));
}
/**
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/PackageCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/PackageCoverage.java
index b67212b0..adb6f5c1 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/PackageCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/PackageCoverage.java
@@ -40,7 +40,7 @@ public class PackageCoverage extends CoverageNodeImpl {
public PackageCoverage(final String name,
final Collection<ClassCoverage> classes,
final Collection<SourceFileCoverage> sourceFiles) {
- super(ElementType.PACKAGE, name, false);
+ super(ElementType.PACKAGE, name);
this.classes = classes;
this.sourceFiles = sourceFiles;
increment(sourceFiles);
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/SourceFileCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/SourceFileCoverage.java
index 2a787569..d02ac12a 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/SourceFileCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/SourceFileCoverage.java
@@ -11,6 +11,7 @@
*******************************************************************************/
package org.jacoco.core.analysis;
+
/**
* Coverage data of a single source file. As source file contains one or more
* classes.
@@ -18,7 +19,7 @@ package org.jacoco.core.analysis;
* @author Marc R. Hoffmann
* @version $qualified.bundle.version$
*/
-public class SourceFileCoverage extends CoverageNodeImpl {
+public class SourceFileCoverage extends SourceNodeImpl {
private final String packagename;
@@ -31,7 +32,7 @@ public class SourceFileCoverage extends CoverageNodeImpl {
* vm name of the package the source file belongs to
*/
public SourceFileCoverage(final String name, final String packagename) {
- super(ElementType.SOURCEFILE, name, true);
+ super(ElementType.SOURCEFILE, name);
this.packagename = packagename;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java b/org.jacoco.core/src/org/jacoco/core/analysis/SourceNodeImpl.java
index 2656c13e..d952dff3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/SourceNodeImpl.java
@@ -9,13 +9,8 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.internal.analysis;
+package org.jacoco.core.analysis;
-import org.jacoco.core.analysis.CounterImpl;
-import org.jacoco.core.analysis.CoverageNodeImpl;
-import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.analysis.ILine;
-import org.jacoco.core.analysis.ISourceNode;
/**
* {@link ISourceNode} implementation.
@@ -39,7 +34,7 @@ public class SourceNodeImpl extends CoverageNodeImpl implements ISourceNode {
* name of the element
*/
public SourceNodeImpl(final ElementType elementType, final String name) {
- super(elementType, name, false);
+ super(elementType, name);
lines = null;
offset = UNKNOWN_LINE;
}
@@ -102,8 +97,8 @@ public class SourceNodeImpl extends CoverageNodeImpl implements ISourceNode {
ensureCapacity(firstLine, lastLine);
for (int i = firstLine; i <= lastLine; i++) {
final ILine line = child.getLine(i);
- incrementLine(line.getInstructionCounter(), getBranchCounter(),
- i);
+ incrementLine(line.getInstructionCounter(),
+ line.getBranchCounter(), i);
}
}
}
diff --git a/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java b/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
index 0fc57b39..f5af86b3 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
@@ -19,7 +19,7 @@ import org.jacoco.core.analysis.Analyzer;
import org.jacoco.core.analysis.ClassCoverage;
import org.jacoco.core.analysis.CoverageBuilder;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.analysis.ILines;
+import org.jacoco.core.analysis.ILine;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.instr.Instrumenter;
import org.jacoco.core.runtime.IRuntime;
@@ -101,11 +101,11 @@ public class CoreTutorial {
private String getColor(final int status) {
switch (status) {
- case ILines.NOT_COVERED:
+ case ILine.NOT_COVERED:
return "red";
- case ILines.PARTLY_COVERED:
+ case ILine.PARTLY_COVERED:
return "yellow";
- case ILines.FULLY_COVERED:
+ case ILine.FULLY_COVERED:
return "green";
}
return "";
@@ -156,13 +156,13 @@ public class CoreTutorial {
System.out.printf("Coverage of class %s%n", cc.getName());
printCounter("instructions", cc.getInstructionCounter());
+ printCounter("branches", cc.getBranchCounter());
printCounter("lines", cc.getLineCounter());
printCounter("methods", cc.getMethodCounter());
- final ILines lines = cc.getLines();
- for (int i = lines.getFirstLine(); i <= lines.getLastLine(); i++) {
+ for (int i = cc.getFirstLine(); i <= cc.getLastLine(); i++) {
System.out.printf("Line %s: %s%n", Integer.valueOf(i),
- getColor(lines.getStatus(i)));
+ getColor(cc.getLine(i).getStatus()));
}
}
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MultiFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/MultiFormatterTest.java
index e42bee6b..fb6b3e1f 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MultiFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MultiFormatterTest.java
@@ -88,7 +88,7 @@ public class MultiFormatterTest {
}
private CoverageNodeImpl createNode(String name) {
- return new CoverageNodeImpl(ElementType.GROUP, name, false);
+ return new CoverageNodeImpl(ElementType.GROUP, name);
}
private static final String MOCK_REPORT = "Session[b1[p1[], p2[]], b2[]]";
diff --git a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
index db97edfc..671d2216 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
@@ -67,7 +67,7 @@ public class ReportStructureTestDriver {
Collections.singleton(packageCoverage));
private final CoverageNodeImpl groupCoverage = new CoverageNodeImpl(
- ElementType.GROUP, "group", false);
+ ElementType.GROUP, "group");
public ReportStructureTestDriver() {
classCoverage.setSourceFileName("FooClass.java");
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
index 154a9733..5dbc297f 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
@@ -82,7 +82,7 @@ public class CSVFormatterTest {
@Test
public void testStructureWithNestedGroups() throws IOException {
final ICoverageNode root = new CoverageNodeImpl(ElementType.GROUP,
- "root", false);
+ "root");
final List<SessionInfo> sessions = Collections.emptyList();
final Collection<ExecutionData> data = Collections.emptyList();
final IReportVisitor child = formatter.createReportVisitor(root,
diff --git a/org.jacoco.report.test/src/org/jacoco/report/html/NodePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/html/NodePageTest.java
index 5b6a868c..3d5fc210 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/html/NodePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/html/NodePageTest.java
@@ -111,7 +111,7 @@ public class NodePageTest {
return Locale.ENGLISH;
}
};
- node = new CoverageNodeImpl(ElementType.GROUP, "Test", false);
+ node = new CoverageNodeImpl(ElementType.GROUP, "Test");
page = new TestNodePage(node);
}
@@ -122,7 +122,7 @@ public class NodePageTest {
@Test
public void testGetNode() throws IOException {
- node.increment(new CoverageNodeImpl(ElementType.GROUP, "Foo", false) {
+ node.increment(new CoverageNodeImpl(ElementType.GROUP, "Foo") {
{
branchCounter = CounterImpl.getInstance(15, 8);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/html/SourceFilePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/html/SourceFilePageTest.java
index 017cdf9d..7fac6e6b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/html/SourceFilePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/html/SourceFilePageTest.java
@@ -106,7 +106,7 @@ public class SourceFilePageTest {
"SourceFilePageTest.java", "org/jacoco/report/html");
final SourceFilePage page = new SourceFilePage(node, null, root,
context);
- page.visitChild(new CoverageNodeImpl(ElementType.CLASS, "Foo", false));
+ page.visitChild(new CoverageNodeImpl(ElementType.CLASS, "Foo"));
}
@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/html/SourceHighlighterTest.java b/org.jacoco.report.test/src/org/jacoco/report/html/SourceHighlighterTest.java
index d9f0aa8d..bb2047bf 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/html/SourceHighlighterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/html/SourceHighlighterTest.java
@@ -17,7 +17,9 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.util.Locale;
-import org.jacoco.core.analysis.LinesImpl;
+import org.jacoco.core.analysis.CounterImpl;
+import org.jacoco.core.analysis.ICoverageNode.ElementType;
+import org.jacoco.core.analysis.SourceNodeImpl;
import org.jacoco.report.internal.html.resources.Styles;
import org.junit.Before;
import org.junit.Test;
@@ -41,12 +43,12 @@ public class SourceHighlighterTest {
private SourceHighlighter sourceHighlighter;
- private LinesImpl lines;
+ private SourceNodeImpl source;
@Before
public void setup() throws Exception {
htmlSupport = new HTMLSupport();
- lines = new LinesImpl();
+ source = new SourceNodeImpl(ElementType.SOURCEFILE, "Foo.java");
buffer = new StringWriter();
html = new HTMLDocument(buffer, "UTF-8");
html.head().title();
@@ -57,7 +59,7 @@ public class SourceHighlighterTest {
@Test
public void testLineNumbering() throws Exception {
final String src = "A\nB\nC\nD";
- sourceHighlighter.render(parent, lines, new StringReader(src));
+ sourceHighlighter.render(parent, source, new StringReader(src));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("\u00A0\u00A0\u00A0\u00A01",
@@ -73,7 +75,7 @@ public class SourceHighlighterTest {
@Test
public void testLineIds() throws Exception {
final String src = "A\nB\nC\nD";
- sourceHighlighter.render(parent, lines, new StringReader(src));
+ sourceHighlighter.render(parent, source, new StringReader(src));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("L1", htmlSupport.findStr(doc, "//pre/span[1]/@id"));
@@ -85,7 +87,7 @@ public class SourceHighlighterTest {
@Test
public void testDefaultTabWidth() throws Exception {
final String src = "\tA";
- sourceHighlighter.render(parent, lines, new StringReader(src));
+ sourceHighlighter.render(parent, source, new StringReader(src));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals(" A\n", htmlSupport.findStr(doc, "//pre/text()"));
@@ -95,7 +97,7 @@ public class SourceHighlighterTest {
public void testSetTabWidth() throws Exception {
final String src = "\tA";
sourceHighlighter.setTabWidth(3);
- sourceHighlighter.render(parent, lines, new StringReader(src));
+ sourceHighlighter.render(parent, source, new StringReader(src));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals(" A\n", htmlSupport.findStr(doc, "//pre/text()"));
@@ -103,7 +105,7 @@ public class SourceHighlighterTest {
@Test
public void testDefaultLanguage() throws Exception {
- sourceHighlighter.render(parent, lines, new StringReader(""));
+ sourceHighlighter.render(parent, source, new StringReader(""));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("source lang-java",
@@ -113,7 +115,7 @@ public class SourceHighlighterTest {
@Test
public void testSetLanguage() throws Exception {
sourceHighlighter.setLanguage("scala");
- sourceHighlighter.render(parent, lines, new StringReader(""));
+ sourceHighlighter.render(parent, source, new StringReader(""));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("source lang-scala",
@@ -123,11 +125,11 @@ public class SourceHighlighterTest {
@Test
public void testHighlighting() throws Exception {
final String src = "A\nB\nC\nD";
- lines.incrementInsn(1, false);
- lines.incrementInsn(2, false);
- lines.incrementInsn(2, true);
- lines.incrementInsn(3, true);
- sourceHighlighter.render(parent, lines, new StringReader(src));
+ source.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
+ source.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 2);
+ source.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 2);
+ source.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 3);
+ sourceHighlighter.render(parent, source, new StringReader(src));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals(Styles.NOT_COVERED,
@@ -142,27 +144,17 @@ public class SourceHighlighterTest {
@Test
public void testHighlightNone() throws Exception {
- sourceHighlighter.highlight(parent, lines, 1);
+ sourceHighlighter.highlight(parent, source.getLine(1));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("", htmlSupport.findStr(doc, "//pre"));
}
@Test
- public void testHighlightFC() throws Exception {
- lines.incrementInsn(1, true);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
- assertEquals("fc", htmlSupport.findStr(doc, "//pre/span/@class"));
- assertEquals("", htmlSupport.findStr(doc, "//pre/span/@title"));
- }
-
- @Test
- public void testHighlightFC_branchesFC() throws Exception {
- lines.incrementInsn(1, true);
- lines.incrementBranches(0, 5, 1);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
+ public void testHighlightBranchesFC() throws Exception {
+ source.increment(CounterImpl.COUNTER_0_1,
+ CounterImpl.getInstance(0, 5), 1);
+ sourceHighlighter.highlight(parent.pre(null), source.getLine(1));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("fc bfc", htmlSupport.findStr(doc, "//pre/span/@class"));
@@ -171,10 +163,10 @@ public class SourceHighlighterTest {
}
@Test
- public void testHighlightFC_branchesPC() throws Exception {
- lines.incrementInsn(1, true);
- lines.incrementBranches(2, 3, 1);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
+ public void testHighlightBranchesPC() throws Exception {
+ source.increment(CounterImpl.COUNTER_0_1,
+ CounterImpl.getInstance(2, 3), 1);
+ sourceHighlighter.highlight(parent.pre(null), source.getLine(1));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("pc bpc", htmlSupport.findStr(doc, "//pre/span/@class"));
@@ -183,10 +175,10 @@ public class SourceHighlighterTest {
}
@Test
- public void testHighlightFC_branchesNC() throws Exception {
- lines.incrementInsn(1, true);
- lines.incrementBranches(5, 0, 1);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
+ public void testHighlightBranchesNC() throws Exception {
+ source.increment(CounterImpl.COUNTER_0_1,
+ CounterImpl.getInstance(5, 0), 1);
+ sourceHighlighter.highlight(parent.pre(null), source.getLine(1));
html.close();
final Document doc = htmlSupport.parse(buffer.toString());
assertEquals("pc bnc", htmlSupport.findStr(doc, "//pre/span/@class"));
@@ -194,25 +186,4 @@ public class SourceHighlighterTest {
htmlSupport.findStr(doc, "//pre/span/@title"));
}
- @Test
- public void testHighlightPC() throws Exception {
- lines.incrementInsn(1, false);
- lines.incrementInsn(1, true);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
- assertEquals("pc", htmlSupport.findStr(doc, "//pre/span/@class"));
- assertEquals("", htmlSupport.findStr(doc, "//pre/span/@title"));
- }
-
- @Test
- public void testHighlightNC() throws Exception {
- lines.incrementInsn(1, false);
- sourceHighlighter.highlight(parent.pre(null), lines, 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
- assertEquals("nc", htmlSupport.findStr(doc, "//pre/span/@class"));
- assertEquals("", htmlSupport.findStr(doc, "//pre/span/@title"));
- }
-
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
index 12720457..f67b9861 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
@@ -215,7 +215,7 @@ public class BarColumnTest {
}
private CoverageNodeImpl createNode(final int missed, final int covered) {
- return new CoverageNodeImpl(ElementType.GROUP, "Foo", false) {
+ return new CoverageNodeImpl(ElementType.GROUP, "Foo") {
{
this.lineCounter = CounterImpl.getInstance(missed, covered);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
index 739f7341..95565d70 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
@@ -219,7 +219,7 @@ public class CounterColumnTest {
}
private CoverageNodeImpl createNode(final int missed, final int covered) {
- return new CoverageNodeImpl(ElementType.GROUP, "Foo", false) {
+ return new CoverageNodeImpl(ElementType.GROUP, "Foo") {
{
this.lineCounter = CounterImpl.getInstance(missed, covered);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
index 30ad843b..56a55956 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
@@ -23,9 +23,6 @@ import org.jacoco.report.html.HTMLDocument;
import org.jacoco.report.html.HTMLElement;
import org.jacoco.report.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
-import org.jacoco.report.internal.html.table.IColumnRenderer;
-import org.jacoco.report.internal.html.table.ITableItem;
-import org.jacoco.report.internal.html.table.LabelColumn;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -78,8 +75,7 @@ public class LabelColumnTest {
@Test
public void testFooter() throws Exception {
- column.footer(td,
- new CoverageNodeImpl(ElementType.GROUP, "Foo", false),
+ column.footer(td, new CoverageNodeImpl(ElementType.GROUP, "Foo"),
resources, root);
doc.close();
final Document doc = support.parse(output.getFile("Test.html"));
@@ -129,8 +125,7 @@ public class LabelColumnTest {
}
private ITableItem createItem(final String name, final String link) {
- final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP,
- name, false);
+ final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, name);
return new ITableItem() {
public String getLinkLabel() {
return name;
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
index 086eebe3..1eccfd80 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
@@ -161,7 +161,7 @@ public class PercentageColumnTest {
}
private CoverageNodeImpl createNode(final int missed, final int covered) {
- return new CoverageNodeImpl(ElementType.GROUP, "Foo", false) {
+ return new CoverageNodeImpl(ElementType.GROUP, "Foo") {
{
this.lineCounter = CounterImpl.getInstance(missed, covered);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
index 47f0b2ad..f404007b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
@@ -224,8 +224,7 @@ public class TableTest {
}
private ITableItem createItem(final String name, final int count) {
- final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP,
- name, false) {
+ final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, name) {
{
this.classCounter = CounterImpl.getInstance(count, 0);
}
@@ -250,7 +249,7 @@ public class TableTest {
}
private ICoverageNode createTotal(final String name, final int count) {
- return new CoverageNodeImpl(ElementType.GROUP, name, false) {
+ return new CoverageNodeImpl(ElementType.GROUP, name) {
{
this.classCounter = CounterImpl.getInstance(count, 0);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
index ae243713..c4023376 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
@@ -72,8 +72,7 @@ public class XMLFormatterTest {
infos.add(new SessionInfo("session-1", 12345, 67890));
infos.add(new SessionInfo("session-2", 1, 2));
infos.add(new SessionInfo("session-3", 1, 2));
- ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "Sample",
- false);
+ ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, "Sample");
final Collection<ExecutionData> data = Collections.emptyList();
formatter.createReportVisitor(node, infos, data).visitEnd(null);
assertPathMatches("session-1", "/report/sessioninfo[1]/@id");
@@ -111,8 +110,8 @@ public class XMLFormatterTest {
final BufferedReader reader = new BufferedReader(new InputStreamReader(
output.getFileAsStream(), "UTF-8"));
final String line = reader.readLine();
- assertTrue(line, line
- .startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\""));
+ assertTrue(line,
+ line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\""));
}
@Test
@@ -122,8 +121,8 @@ public class XMLFormatterTest {
final BufferedReader reader = new BufferedReader(new InputStreamReader(
output.getFileAsStream(), "UTF-16"));
final String line = reader.readLine();
- assertTrue(line, line
- .startsWith("<?xml version=\"1.0\" encoding=\"UTF-16\""));
+ assertTrue(line,
+ line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-16\""));
}
private void assertPathMatches(String expected, String path)
diff --git a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLReportNodeHandlerTest.java b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLReportNodeHandlerTest.java
index c77fcf50..a6e7da20 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLReportNodeHandlerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLReportNodeHandlerTest.java
@@ -22,6 +22,7 @@ import org.jacoco.core.analysis.CounterImpl;
import org.jacoco.core.analysis.CoverageNodeImpl;
import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.analysis.MethodCoverage;
+import org.jacoco.core.analysis.SourceNodeImpl;
import org.jacoco.report.IReportVisitor;
import org.junit.Before;
import org.junit.Test;
@@ -51,7 +52,7 @@ public class XMLReportNodeHandlerTest {
root = new XMLDocument("report", "-//JACOCO//DTD Report 1.0//EN",
"report.dtd", "UTF-8", true, buffer);
handler = new XMLReportNodeHandler(root, new CoverageNodeImpl(
- ElementType.GROUP, "Sample", false));
+ ElementType.GROUP, "Sample"));
}
@Test
@@ -62,8 +63,7 @@ public class XMLReportNodeHandlerTest {
@Test
public void testGroup() throws Exception {
- handler.visitChild(
- new CoverageNodeImpl(ElementType.GROUP, "Group1", false))
+ handler.visitChild(new CoverageNodeImpl(ElementType.GROUP, "Group1"))
.visitEnd(null);
final Document doc = getDocument();
assertEquals("Group1", support.findStr(doc, "//report/group/@name"));
@@ -72,7 +72,7 @@ public class XMLReportNodeHandlerTest {
@Test
public void testCounters() throws Exception {
final CoverageNodeImpl node = new CoverageNodeImpl(ElementType.GROUP,
- "Group1", false) {
+ "Group1") {
{
classCounter = CounterImpl.getInstance(9, 1);
methodCounter = CounterImpl.getInstance(18, 2);
@@ -108,8 +108,8 @@ public class XMLReportNodeHandlerTest {
@Test
public void testPackage() throws Exception {
handler.visitChild(
- new CoverageNodeImpl(ElementType.PACKAGE, "org.jacoco.example",
- false)).visitEnd(null);
+ new CoverageNodeImpl(ElementType.PACKAGE, "org.jacoco.example"))
+ .visitEnd(null);
final Document doc = getDocument();
assertEquals("org.jacoco.example",
support.findStr(doc, "//report/package/@name"));
@@ -119,10 +119,9 @@ public class XMLReportNodeHandlerTest {
public void testClass() throws Exception {
final IReportVisitor packageHandler = handler
.visitChild(new CoverageNodeImpl(ElementType.PACKAGE,
- "org.jacoco.example", false));
- packageHandler.visitChild(
- new CoverageNodeImpl(ElementType.CLASS, "Foo", true)).visitEnd(
- null);
+ "org.jacoco.example"));
+ packageHandler.visitChild(new SourceNodeImpl(ElementType.CLASS, "Foo"))
+ .visitEnd(null);
packageHandler.visitEnd(null);
final Document doc = getDocument();
assertEquals("Foo",
@@ -133,13 +132,11 @@ public class XMLReportNodeHandlerTest {
public void testMethod() throws Exception {
final IReportVisitor packageHandler = handler
.visitChild(new CoverageNodeImpl(ElementType.PACKAGE,
- "org.jacoco.example", false));
+ "org.jacoco.example"));
final IReportVisitor classHandler = packageHandler
- .visitChild(new CoverageNodeImpl(ElementType.CLASS, "Foo", true));
+ .visitChild(new SourceNodeImpl(ElementType.CLASS, "Foo"));
MethodCoverage node = new MethodCoverage("doit", "()V", null);
- node.addInsn(false, 15);
- node.addInsn(false, 16);
- node.addInsn(false, 16);
+ node.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 15);
classHandler.visitChild(node).visitEnd(null);
classHandler.visitEnd(null);
packageHandler.visitEnd(null);
@@ -156,33 +153,26 @@ public class XMLReportNodeHandlerTest {
public void testSourcefile() throws Exception {
final IReportVisitor packageHandler = handler
.visitChild(new CoverageNodeImpl(ElementType.PACKAGE,
- "org.jacoco.example", false));
- final CoverageNodeImpl node = new CoverageNodeImpl(
- ElementType.SOURCEFILE, "Foo.java", true) {
- {
- lines.incrementInsn(11, false);
- lines.incrementInsn(13, false);
- lines.incrementInsn(13, true);
- lines.incrementInsn(14, true);
- }
- };
+ "org.jacoco.example"));
+ final SourceNodeImpl node = new SourceNodeImpl(ElementType.SOURCEFILE,
+ "Foo.java");
+ node.increment(CounterImpl.getInstance(1, 2),
+ CounterImpl.getInstance(3, 4), 12);
packageHandler.visitChild(node).visitEnd(null);
packageHandler.visitEnd(null);
final Document doc = getDocument();
assertEquals("Foo.java",
support.findStr(doc, "//report/package/sourcefile/@name"));
- assertEquals("11",
- support.findStr(doc, "//report/package/sourcefile/line[1]/@nr"));
- assertEquals("N", support.findStr(doc,
- "//report/package/sourcefile/line[1]/@status"));
- assertEquals("13",
- support.findStr(doc, "//report/package/sourcefile/line[2]/@nr"));
- assertEquals("P", support.findStr(doc,
- "//report/package/sourcefile/line[2]/@status"));
- assertEquals("14",
- support.findStr(doc, "//report/package/sourcefile/line[3]/@nr"));
- assertEquals("F", support.findStr(doc,
- "//report/package/sourcefile/line[3]/@status"));
+ assertEquals("12",
+ support.findStr(doc, "//report/package/sourcefile/line/@nr"));
+ assertEquals("1",
+ support.findStr(doc, "//report/package/sourcefile/line/@mi"));
+ assertEquals("2",
+ support.findStr(doc, "//report/package/sourcefile/line/@ci"));
+ assertEquals("3",
+ support.findStr(doc, "//report/package/sourcefile/line/@mb"));
+ assertEquals("4",
+ support.findStr(doc, "//report/package/sourcefile/line/@cb"));
}
private Document getDocument() throws SAXException, IOException,
diff --git a/org.jacoco.report/src/org/jacoco/report/html/ClassPage.java b/org.jacoco.report/src/org/jacoco/report/html/ClassPage.java
index 1be3780b..4f4071a5 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/ClassPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/ClassPage.java
@@ -18,6 +18,7 @@ import java.util.Map;
import org.jacoco.core.analysis.ClassCoverage;
import org.jacoco.core.analysis.ICoverageNode;
+import org.jacoco.core.analysis.ISourceNode;
import org.jacoco.core.analysis.MethodCoverage;
import org.jacoco.report.IReportVisitor;
import org.jacoco.report.ReportOutputFolder;
@@ -59,8 +60,10 @@ public class ClassPage extends NodePage {
return null;
}
final String link = sourceFilePage.getLink(base);
- final int first = node.getLines().getFirstLine();
- return first != -1 ? link + "#L" + first : link;
+ final ISourceNode source = node;
+ final int first = source.getFirstLine();
+ return first != ISourceNode.UNKNOWN_LINE ? link + "#L" + first
+ : link;
}
public ICoverageNode getNode() {
diff --git a/org.jacoco.report/src/org/jacoco/report/html/SourceFilePage.java b/org.jacoco.report/src/org/jacoco/report/html/SourceFilePage.java
index 13ab7110..32b1bf7d 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/SourceFilePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/SourceFilePage.java
@@ -15,7 +15,7 @@ import java.io.IOException;
import java.io.Reader;
import org.jacoco.core.analysis.ICoverageNode;
-import org.jacoco.core.analysis.ILines;
+import org.jacoco.core.analysis.ISourceNode;
import org.jacoco.core.analysis.SourceFileCoverage;
import org.jacoco.report.IReportVisitor;
import org.jacoco.report.ISourceFileLocator;
@@ -35,7 +35,7 @@ public class SourceFilePage extends NodePage {
private final String packageName;
- private final ILines lines;
+ private final ISourceNode source;
/**
* Creates a new page with given information.
@@ -50,7 +50,7 @@ public class SourceFilePage extends NodePage {
final IHTMLReportContext context) {
super(sourceFileNode, parent, folder, context);
packageName = sourceFileNode.getPackageName();
- lines = sourceFileNode.getLines();
+ source = sourceFileNode;
}
public IReportVisitor visitChild(final ICoverageNode node) {
@@ -70,7 +70,7 @@ public class SourceFilePage extends NodePage {
@Override
protected void content(final HTMLElement body) throws IOException {
final SourceHighlighter hl = new SourceHighlighter(context.getLocale());
- hl.render(body, lines, sourceReader);
+ hl.render(body, source, sourceReader);
sourceReader.close();
}
diff --git a/org.jacoco.report/src/org/jacoco/report/html/SourceHighlighter.java b/org.jacoco.report/src/org/jacoco/report/html/SourceHighlighter.java
index 959f085f..71389996 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/SourceHighlighter.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/SourceHighlighter.java
@@ -17,7 +17,8 @@ import java.io.Reader;
import java.util.Arrays;
import java.util.Locale;
-import org.jacoco.core.analysis.ILines;
+import org.jacoco.core.analysis.ILine;
+import org.jacoco.core.analysis.ISourceNode;
import org.jacoco.report.internal.html.resources.Styles;
/**
@@ -77,14 +78,14 @@ class SourceHighlighter {
*
* @param parent
* parent HTML element
- * @param lines
+ * @param source
* highlighting information
* @param contents
* contents of the source file
* @throws IOException
* problems while reading the source file or writing the output
*/
- public void render(final HTMLElement parent, final ILines lines,
+ public void render(final HTMLElement parent, final ISourceNode source,
final Reader contents) throws IOException {
final HTMLElement pre = parent.pre(Styles.SOURCE + " lang-" + lang);
final BufferedReader lineBuffer = new BufferedReader(contents);
@@ -93,7 +94,7 @@ class SourceHighlighter {
while ((line = lineBuffer.readLine()) != null) {
nr++;
renderLineNr(pre, nr);
- renderCodeLine(pre, line, lines, nr);
+ renderCodeLine(pre, line, source.getLine(nr));
}
}
@@ -107,38 +108,33 @@ class SourceHighlighter {
linespan.text(linestr);
}
- private void renderCodeLine(final HTMLElement pre, final String line,
- final ILines lines, final int nr) throws IOException {
- highlight(pre, lines, nr).text(line.replace("\t", tabReplacement));
+ private void renderCodeLine(final HTMLElement pre, final String linesrc,
+ final ILine line) throws IOException {
+ highlight(pre, line).text(linesrc.replace("\t", tabReplacement));
pre.text("\n");
}
- HTMLElement highlight(final HTMLElement pre, final ILines lines,
- final int nr) throws IOException {
+ HTMLElement highlight(final HTMLElement pre, final ILine line)
+ throws IOException {
final String style;
- final int missedBranches = lines.getMissedBranches(nr);
- switch (lines.getStatus(nr)) {
- case ILines.NOT_COVERED:
+ switch (line.getStatus()) {
+ case ILine.NOT_COVERED:
style = Styles.NOT_COVERED;
break;
- case ILines.FULLY_COVERED:
- if (missedBranches == 0) {
- style = Styles.FULLY_COVERED;
- } else {
- // We also mark lines in yellow with partial branch coverage:
- style = Styles.PARTLY_COVERED;
- }
+ case ILine.FULLY_COVERED:
+ style = Styles.FULLY_COVERED;
break;
- case ILines.PARTLY_COVERED:
+ case ILine.PARTLY_COVERED:
style = Styles.PARTLY_COVERED;
break;
default:
return pre;
}
- final int totalBranches = lines.getTotalBranches(nr);
+ final int totalBranches = line.getBranchCounter().getTotalCount();
if (totalBranches == 0) {
return pre.span(style);
}
+ final int missedBranches = line.getBranchCounter().getMissedCount();
final Integer t = Integer.valueOf(totalBranches);
if (missedBranches == 0) {
return span(pre, style, Styles.BRANCH_FULLY_COVERED,
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/XMLReportNodeHandler.java b/org.jacoco.report/src/org/jacoco/report/xml/XMLReportNodeHandler.java
index cab19e60..fcc1f7a0 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/XMLReportNodeHandler.java
+++ b/org.jacoco.report/src/org/jacoco/report/xml/XMLReportNodeHandler.java
@@ -18,7 +18,8 @@ import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.analysis.ICoverageNode;
import org.jacoco.core.analysis.ICoverageNode.CounterEntity;
import org.jacoco.core.analysis.ICoverageNode.ElementType;
-import org.jacoco.core.analysis.ILines;
+import org.jacoco.core.analysis.ILine;
+import org.jacoco.core.analysis.ISourceNode;
import org.jacoco.core.analysis.MethodCoverage;
import org.jacoco.report.IReportVisitor;
import org.jacoco.report.ISourceFileLocator;
@@ -89,7 +90,7 @@ class XMLReportNodeHandler implements IReportVisitor {
final XMLElement methodChild = element.element("method");
final MethodCoverage methodNode = (MethodCoverage) node;
methodChild.attr("desc", methodNode.getDesc());
- final int line = methodNode.getLines().getFirstLine();
+ final int line = methodNode.getFirstLine();
if (line != -1) {
methodChild.attr("line", line);
}
@@ -99,7 +100,7 @@ class XMLReportNodeHandler implements IReportVisitor {
@Override
protected void insertElementsAfter(final XMLElement element)
throws IOException {
- writeLines(node.getLines(), element);
+ writeLines((ISourceNode) node, element);
}
};
default:
@@ -128,25 +129,20 @@ class XMLReportNodeHandler implements IReportVisitor {
}
}
- private static void writeLines(final ILines lines, final XMLElement parent)
- throws IOException {
- final int last = lines.getLastLine();
- for (int nr = lines.getFirstLine(); nr <= last; nr++) {
- final byte status = lines.getStatus(nr);
- if (status != ILines.NO_CODE) {
- final XMLElement line = parent.element("line");
- line.attr("nr", nr);
- switch (status) {
- case ILines.NOT_COVERED:
- line.attr("status", "N");
- break;
- case ILines.PARTLY_COVERED:
- line.attr("status", "P");
- break;
- case ILines.FULLY_COVERED:
- line.attr("status", "F");
- break;
- }
+ private static void writeLines(final ISourceNode source,
+ final XMLElement parent) throws IOException {
+ final int last = source.getLastLine();
+ for (int nr = source.getFirstLine(); nr <= last; nr++) {
+ final ILine line = source.getLine(nr);
+ if (line.getStatus() != ILine.NO_CODE) {
+ final XMLElement element = parent.element("line");
+ element.attr("nr", nr);
+ final ICounter insn = line.getInstructionCounter();
+ element.attr("mi", insn.getMissedCount());
+ element.attr("ci", insn.getCoveredCount());
+ final ICounter branches = line.getBranchCounter();
+ element.attr("mb", branches.getMissedCount());
+ element.attr("cb", branches.getCoveredCount());
}
}
}
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/report.dtd b/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
index 0221583b..4343e258 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
+++ b/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
@@ -65,8 +65,10 @@
<!ELEMENT line EMPTY>
<!-- line number -->
<!ATTLIST line nr CDATA #REQUIRED>
- <!-- instruction coverage status -->
- <!ATTLIST line status (N|P|F) #REQUIRED>
+ <!-- number of missed instructions -->
+ <!ATTLIST line mi CDATA #IMPLIED>
+ <!-- number of covered instructions -->
+ <!ATTLIST line ci CDATA #IMPLIED>
<!-- number of missed branches -->
<!ATTLIST line mb CDATA #IMPLIED>
<!-- number of covered branches -->