在图书馆中,我想要这样的东西:
@JvmStatic
inline fun d(message: String) = log { Logger.d(message) }
在kotlin中,此函数是内联的,因此有趣的调用堆栈从x级别开始。在Java中,代码没有内联,因此有趣的调用栈从x + 1级别开始(静态函数为+1)。
是否有某种方法可以在函数中找出是在java类还是kotlin类中调用的?甚至更好,我是否可以编写两个函数,一个仅用于koltin,一个仅用于java? (JvmSynthetic
例如会从Java类中隐藏代码,但反过来我找不到类似的东西)。
以下伪解决方案将起作用:
// pseudo code - idea 1
@JvmStatic
inline fun d(message: String) = log {
if (CALLED_FROM_JAVA)
Logger.adjustCallStackOffset(1)
Logger.d(message)
}
// pseudo code - idea 2
@JvmStatic @HideFromKotlin
inline fun d(message: String) = log {
Logger.adjustCallStackOffset(1)
Logger.d(message)
}