aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java34
-rw-r--r--org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java9
-rw-r--r--org.jacoco.doc/docroot/doc/changes.html3
3 files changed, 38 insertions, 8 deletions
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 d48fb7f9..e1ac156d 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
@@ -143,8 +143,8 @@ public class CoverageBuilderTest {
final ClassCoverage classCoverage = coverageBuilder.getClasses()
.iterator().next();
- assertEquals(Collections.singleton("a"), getNames(classCoverage
- .getMethods()));
+ assertEquals(Collections.singleton("a"),
+ getNames(classCoverage.getMethods()));
}
@Test
@@ -162,6 +162,28 @@ public class CoverageBuilderTest {
assertTrue(classes.isEmpty());
}
+ @Test(expected = IllegalStateException.class)
+ public void testDuplicateClassName() {
+ IClassStructureVisitor classStructure = coverageBuilder
+ .visitClassStructure(123L);
+ classStructure.visit("org/jacoco/examples/Sample", null,
+ "java/lang/Object", new String[0]);
+ IMethodStructureVisitor methodStructure = classStructure
+ .visitMethodStructure("doit", "()V", null);
+ methodStructure.block(0, 3, new int[] { 3, 4, 5 });
+ methodStructure.visitEnd();
+ classStructure.visitEnd();
+
+ classStructure = coverageBuilder.visitClassStructure(345L);
+ classStructure.visit("org/jacoco/examples/Sample", null,
+ "java/lang/Object", new String[0]);
+ methodStructure = classStructure.visitMethodStructure("doit", "()V",
+ null);
+ methodStructure.block(0, 3, new int[] { 3, 4, 5 });
+ methodStructure.visitEnd();
+ classStructure.visitEnd();
+ }
+
@Test
public void testCreateSourceFile() {
final IClassStructureVisitor classStructure1 = coverageBuilder
@@ -177,7 +199,7 @@ public class CoverageBuilderTest {
final IClassStructureVisitor classStructure2 = coverageBuilder
.visitClassStructure(123L);
- classStructure2.visit("org/jacoco/examples/Sample", null,
+ classStructure2.visit("org/jacoco/examples/Second", null,
"java/lang/Object", new String[0]);
classStructure2.visitSourceFile("Sample.java");
final IMethodStructureVisitor methodStructure2 = classStructure2
@@ -239,8 +261,10 @@ public class CoverageBuilderTest {
PackageCoverage p1 = packagesByName.get("org/jacoco/examples");
assertNotNull(p1);
- assertEquals(new HashSet<String>(Arrays.asList(
- "org/jacoco/examples/Sample1", "org/jacoco/examples/Sample2")),
+ assertEquals(
+ new HashSet<String>(Arrays.asList(
+ "org/jacoco/examples/Sample1",
+ "org/jacoco/examples/Sample2")),
getNames(p1.getClasses()));
PackageCoverage p2 = packagesByName.get("");
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
index 66521de8..b5ba833e 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
@@ -40,7 +40,7 @@ public class CoverageBuilder implements IStructureVisitor {
private final StringPool stringPool;
- private final Map<Long, ClassCoverage> classes;
+ private final Map<String, ClassCoverage> classes;
private final Map<String, SourceFileCoverage> sourcefiles;
@@ -66,7 +66,7 @@ public class CoverageBuilder implements IStructureVisitor {
final StringPool stringPool) {
this.executionData = executionData;
this.stringPool = stringPool;
- this.classes = new HashMap<Long, ClassCoverage>();
+ this.classes = new HashMap<String, ClassCoverage>();
this.sourcefiles = new HashMap<String, SourceFileCoverage>();
}
@@ -136,7 +136,10 @@ public class CoverageBuilder implements IStructureVisitor {
signature, superName, interfaces, sourcename, methods);
// Only consider classes that actually contain code:
if (classData.getInstructionCounter().getTotalCount() > 0) {
- classes.put(Long.valueOf(id), classData);
+ if (classes.put(name, classData) != null) {
+ throw new IllegalStateException(
+ "Duplicate class name in same group: " + name);
+ }
if (sourcename != null) {
final String packageName = stringPool.get(classData
.getPackageName());
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index 98cd6357..8cb0239b 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -25,6 +25,9 @@
<li>Only process actual Java class files during analysis (SF #3106102).</li>
<li>Fix broken source links due to sort hash (Track #125).</li>
<li>Fixed invalid OSGi headers in MANIFEST.MF files (Track #127).</li>
+ <li>Try to avoid inerference with Hibernate (SF #3134190).</li>
+ <li>Provide proper error message in case of duplicate class names in the same
+ group (SF #3110219).</li>
</ul>
<h2>Release 0.4.1 (2010/10/07)</h2>