I want to shadow a Kotlin companion object. The companion object what i want to shadowing is:
class MyLogClass {
companion object {
@JvmStatic
fun logV(tag: String, messageProvider: () -> String) {
if (SPUtils.getLogLevel() >= mLogLevel) {
Log.v(tag, messageProvider.invoke())
}
}
}
}
What I have tried:
// Shadow class...
@Implements(MyLogClass.Companion::class)
class ShadowMyLogClass {
@Implementation
fun v(tag: String, messageProvider: () -> String) {
redirectConsole(tag, messageProvider)
}
private fun redirectConsole(tag: String, messageProvider: () -> String) {
println("[$tag]${messageProvider.invoke()}")
}
}
// And in Testing class...
class TestMyLogClass {
@Test
fun test() {
MyLogClass.logV("some tag") {
"some message"
}
}
}
But what I have tried occur an Error:
Caused by: java.lang.IllegalAccessError: tried to access class kotlin.jvm.internal.DefaultConstructorMarker from class com.example.zspirytus.log.impl.MyLogClass$Companion
It seems that there is lost an constructor method which type is DefaultConstructorMarker
, How can I make an DefaultConstructorMarker
or other way to create a Shadow MyLogClass
? Thanks for your reading and answers!