Hello,
First of all, thank you for the great work and effort put into implementing the KotlinSerializationFilter. It's really helpful to have support for Kotlin Serialization in JaCoCo coverage reports.
However, I have encountered an issue where the KotlinSerializationFilter does not correctly handle sealed classes annotated with @Serializable. Specifically, when a sealed class like the example below is present in the codebase, the Jacoco report generation crashes.
This issue happens on the latest SNAPSHOT version - JaCoCo 0.8.14.202510071157
@Serializable
sealed class Animal {
@Serializable
data class Dog(
val name: String,
val breed: String
) : Animal()
@Serializable
data class Cat(
val name: String,
val color: String
) : Animal()
}
Trying to analyze the above code for example crashes with the following:
Caused by: : Error while creating report
at org.jacoco.ant.ReportTask.execute(ReportTask.java:502)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:90)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:547)
at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:218)
...
Caused by: java.io.IOException: Error while analyzing Animal$Companion.class with JaCoCo 0.8.14.202510071157/0981128.
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.jacoco.ant.ReportTask.createBundle(ReportTask.java:573)
at org.jacoco.ant.ReportTask.createReport(ReportTask.java:545)
at org.jacoco.ant.ReportTask.execute(ReportTask.java:496)
... 46 more
Caused by: java.lang.NullPointerException: Cannot invoke "org.objectweb.asm.tree.AbstractInsnNode.getPrevious()" because "this.cursor" is null
at org.jacoco.core.internal.analysis.filter.KotlinSerializableFilter$Matcher.match(KotlinSerializableFilter.java:79)
at org.jacoco.core.internal.analysis.filter.KotlinSerializableFilter.filter(KotlinSerializableFilter.java:44)
at org.jacoco.core.internal.analysis.filter.FilterSet.filter(FilterSet.java:31)
at org.jacoco.core.internal.analysis.filter.Filters$1.filter(Filters.java:45)
at org.jacoco.core.internal.analysis.ClassAnalyzer.addMethodCoverage(ClassAnalyzer.java:131)
at org.jacoco.core.internal.analysis.ClassAnalyzer.access$100(ClassAnalyzer.java:38)
at org.jacoco.core.internal.analysis.ClassAnalyzer$1.accept(ClassAnalyzer.java:115)
at org.jacoco.core.internal.flow.ClassProbesAdapter$2.visitEnd(ClassProbesAdapter.java:91)
at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1516)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:117)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:133)
... 51 more
Hello,
First of all, thank you for the great work and effort put into implementing the
KotlinSerializationFilter. It's really helpful to have support for Kotlin Serialization in JaCoCo coverage reports.However, I have encountered an issue where the
KotlinSerializationFilterdoes not correctly handle sealed classes annotated with@Serializable. Specifically, when a sealed class like the example below is present in the codebase, the Jacoco report generation crashes.This issue happens on the latest SNAPSHOT version - JaCoCo 0.8.14.202510071157
Trying to analyze the above code for example crashes with the following: