Rob Elliot
11/30/2023, 6:16 PMsetInt(Integer value) & setInt(int value). They both override to the same signature in Kotlin...
Is there an escape hatch?Shawn
11/30/2023, 6:23 PMShawn
11/30/2023, 6:23 PMInt and Int?Rob Elliot
11/30/2023, 6:33 PMclass Decorator : BaseClass() {
val delegate = BaseClass()
override fun setInt(integer: Int?) { delegate.setInt(integer) }
override fun setInt(integer: Int) { delegate.setInt(integer) }
}
results in this error:
e: file:///Decorator.kt:6:12 Accidental override: The following declarations have the same JVM signature (setInt(Ljava/lang/Integer;)V):
fun setInt(integer: Int?): Unit defined in io.mocklab.host.openapi.linenumbers.Decorator
fun setInt(integer: Int?): Unit defined in io.mocklab.host.openapi.linenumbers.DecoratorRob Elliot
11/30/2023, 6:39 PMclass Decorator : BaseClass() {
val delegate = BaseClass()
override fun setInt(integer: Int) { delegate.setInt(integer) }
}
then Java code calling setInt will be routed to this method whether an Integer or an int is supplied as the argument, so at least I'm always intercepting it.
Still not great - if I make the parameter nullable then calls with an int are not intercepted, but if it's not nullable calls with null blow up with an NPE.ephemient
12/01/2023, 1:37 AMclass Decorator : BaseClass() {
val delegate = BaseClass()
@Suppress("ACCIDENTAL_OVERRIDE")
@JvmName("setInt")
fun setPrimitiveInt(integer: Int) {
delegate.setInt(integer)
}
@Suppress("ACCIDENTAL_OVERRIDE")
@JvmName("setInt")
fun setBoxedInt(integer: Int?) {
delegate.setInt(integer)
}
}Rob Elliot
12/01/2023, 9:30 AM