В библиотеке я хочу что-то вроде этого:
@JvmStatic
inline fun d(message: String) = log { Logger.d(message) }
В kotlin эта функция встроена, поэтому интересный стек вызовов начинается с уровня x. В Java код не встроен, поэтому интересный стек вызовов начинается с уровня x + 1 (+1 для статической функции).
Есть ли какой-нибудь способ узнать в функции, вызывается ли она в классе java или классе kotlin? Или даже лучше, я могу написать две функции, одну только для колтина и одну только для 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)
}