I have an Android service written in Kotlin which I inject using Guice. It has lateinit fields which cannot be null, but they must be lateinit because I cannot use constructor injection.
Something around these lines:
class VibrationService : Service() {
@Inject
private lateinit var pm: PowerManager
private lateinit var wakeLock: WakeLock
override fun onCreate() {
AlarmApplication.guice().injectMembers(this)
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VibrationService")
wakeLock.acquire()
}
}
Now when I create JaCoCo reports, all lines where any of the lateinit fields are accessed are marked as partially covered. I think Kotlin compiler adds some checks to the bytecode to make sure that fields are initialized before they are accessed.
Is there any way to disable these checks? I want my 100% coverage:-)
Use the new kotlinx-kover Gradle plugin which is compatible with JaCoCo and IntelliJ.
It resolves the problem with inline
functions. Hopefully, it will resolve your problem too.
plugins {
id("org.jetbrains.kotlinx.kover") version "0.5.0"
}
Once applied, the plugin can be used out of the box without additional configuration.
Watch its YouTube announcement video and also track its roadmap from this youtrack issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With