Monosoul's Dev Blog A blog to write down dev-related stuff I face
Java Code Coverage

Kotlin 1.5 and JaCoCo report exception

Kotlin 1.5 came out not so long ago and recently we decided to give it a go in our team. Upgrade mostly went smoothly, but our JaCoCo report task in Gradle started to throw an exception.

Surprisingly the task just failed without any output whatsoever.

Luckily, there is a way to make Gradle a bit more verbose. So, to troubleshoot the issue I ran it with --info and --stacktrace arguments like this:

./gradlew jacocoTestReport --info --stacktrace

The root cause in the stacktrace I got as the output was this:

Caused by: java.lang.IllegalStateException: Unexpected SMAP line: *S KotlinDebug
         at org.jacoco.core.internal.analysis.filter.KotlinInlineFilter.getFirstGeneratedLineNumber(KotlinInlineFilter.java:98)
         at org.jacoco.core.internal.analysis.filter.KotlinInlineFilter.filter(KotlinInlineFilter.java:44)
         at org.jacoco.core.internal.analysis.filter.Filters.filter(Filters.java:59)
         at org.jacoco.core.internal.analysis.ClassAnalyzer.addMethodCoverage(ClassAnalyzer.java:119)
         at org.jacoco.core.internal.analysis.ClassAnalyzer.access$100(ClassAnalyzer.java:33)
         at org.jacoco.core.internal.analysis.ClassAnalyzer$1.accept(ClassAnalyzer.java:108)
         at org.jacoco.core.internal.flow.ClassProbesAdapter$2.visitEnd(ClassProbesAdapter.java:91)
         at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1492)
         at org.objectweb.asm.ClassReader.accept(ClassReader.java:718)
         at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
         at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:116)
         at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:132)
         … 161 more

I did a quick research and it turns out that by that time it was a known issue. And the solution to it is rather simple: just update your JaCoCo agent to version 0.8.7 or later.

Here’s how to do that with Gradle:

jacoco {
     toolVersion = "0.8.7"
}

And with Maven you just have to change the plugin version like this:

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.7</version>
</plugin>

Luckily this was a rather easy change. Happy coding!

Like it? Share it!

Leave a comment

Your email address will not be published.

6 thoughts on “Kotlin 1.5 and JaCoCo report exception”