Kotlin: принудительный встроенный метод для сохранения количества определенных строк - PullRequest
2 голосов
/ 14 января 2020

Итак, у меня есть этот метод, который я хочу использовать для ведения журнала при возврате зарегистрированного объекта:

inline fun <T> T.btwLog(prefix:String="")=apply { Timber.d("$prefix->${toString()}") }

Класс Timber из библиотеки ведения журнала, а также (при настройке таким образом) показывает строка, в которой он был вызван, поэтому метод является встроенным (чтобы показать строку и правильный класс того, где он был вызван). Например:

val b = someThingComplex().btwLog()

Это в основном работает, единственная проблема заключается в том, что номер строки неправильный. Это в основном должно быть потому, что Kotlin вставляет метод и при этом добавляет несколько строк в класс (4)?.

Так что предыдущий пример, вероятно, выглядит примерно так:

val b = someThingComplex()
        .apply { 
        Timber.d("$prefix->${toString()}")
        }

Альтернативой этому методу является то, что Kotlin не добавляет дополнительных строк:

inline fun Any.log(s:String="")= Timber.d(s+this)

Есть ли способ заставить Kotlin просто вставить его в точности так, как я его написал, а не добавить переносы строк и прочее? Или есть лучший способ, которым я мог бы определить метод в целом?

Спасибо.

1 Ответ

0 голосов
/ 14 января 2020

Я подозреваю, что смещение номеров строк может быть связано с вызовом apply. Попробуйте это так.

inline fun <T> T.btwLog(prefix: String = ""): T {
    Timber.d(prefix + "->" + this)
    return this
}
...