检查是否从Java调用(或仅针对Java定义函数)

时间:2019-01-18 08:57:40

标签: kotlin

在图书馆中,我想要这样的东西:

@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) 
}

0 个答案:

没有答案