Here is the unit test causing crashes on all others unit tests when launched as coverage configuration :
public class JiraBcel362TestCase extends AbstractTestCase {
@Test
public void testProcessConstantPoolWithCondyEntry() throws ClassNotFoundException {
final JavaClass clazz = getTestJavaClass("issue362.Bcel362");
final ConstantPoolGen constantPoolGen = assertDoesNotThrow(() -> new ConstantPoolGen(clazz.getConstantPool()));
assertTrue(constantPoolGen.lookupUtf8("$jacocoData") != -1);
}
}
An input class for this test :
package issue362;
public class Bcel362 {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
The test runs fine with :
Run As -> JUnit Test
.- Command line
mvn test
When any other test of the project is run with Coverage As -> JUnit Test
, I have this crash:
Error while loading coverage session (code 5001).
Error while analyzing package fragment root java at F/commons-bcel/target/test-classes (code 5007).
Error while analyzing Bcel362.class with JaCoCo 0.8.8.202204050719/5dcf34a.
Only after deleting JiraBcel362TestCase
and Bcel362
, I manage to run coverage sessions on other unit tests.
Stack trace related to the crash is found in the Error Log
view in Eclipse.
org.eclipse.core.runtime.CoreException: Error while analyzing package fragment root java at F/commons-bcel/target/test-classes (code 5007).
at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyzeInternal(PackageFragementRootAnalyzer.java:79)
at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyze(PackageFragementRootAnalyzer.java:51)
at org.eclipse.eclemma.internal.core.analysis.SessionAnalyzer.processPackageFragmentRoot(SessionAnalyzer.java:100)
at org.eclipse.eclemma.internal.core.analysis.SessionAnalyzer.processSession(SessionAnalyzer.java:80)
at org.eclipse.eclemma.internal.core.JavaCoverageLoader$LoadSessionJob.run(JavaCoverageLoader.java:83)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.io.IOException: Error while analyzing Bcel362.class with JaCoCo 0.8.8.202204050719/5dcf34a.
at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:163)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:135)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:158)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:195)
at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:63)
at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:75)
at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:75)
at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walk(ResourceTreeWalker.java:51)
at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyzeInternal(PackageFragementRootAnalyzer.java:74)
... 5 more
Caused by: java.lang.IllegalStateException: Cannot process instrumented class issue362/Bcel362. Please supply original non-instrumented classes.
at org.jacoco.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:238)
at org.jacoco.core.internal.analysis.ClassAnalyzer.visitMethod(ClassAnalyzer.java:98)
at org.jacoco.core.internal.flow.ClassProbesAdapter.visitMethod(ClassProbesAdapter.java:66)
at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1353)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:744)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:424)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:117)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:133)
... 12 more
Not sure what is meant here by Please supply original non-instrumented classes
especially considering that coverage session runs fine in command-line and in CI.
The javap
output of Bcel362
:
Compiled from "Bcel362.java"
public class issue362.Bcel362 {
public issue362.Bcel362();
Code:
0: ldc #42 // Dynamic #0:$jacocoData:Ljava/lang/Object;
2: checkcast #44 // class "[Z"
5: astore_1
6: aload_0
7: invokespecial #1 // Method java/lang/Object."<init>":()V
10: aload_1
11: iconst_0
12: iconst_1
13: bastore
14: return
public static void main(java.lang.String[]);
Code:
0: ldc #42 // Dynamic #0:$jacocoData:Ljava/lang/Object;
2: checkcast #44 // class "[Z"
5: astore_1
6: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream;
9: ldc #13 // String Hello world!
11: invokevirtual #15 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
14: aload_1
15: iconst_1
16: iconst_1
17: bastore
18: return
private static boolean[] $jacocoInit(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.Class);
Code:
0: ldc2_w #45 // long -7406015067494855438l
3: ldc #47 // String issue362/Bcel362
5: iconst_2
6: invokestatic #53 // Method org/jacoco/agent/rt/internal_b6258fc/Offline.getProbes:(JLjava/lang/String;I)[Z
9: areturn
}