Hakob Vardanyan
08/09/2020, 10:41 AMe: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't inline method call 'collectInMainBy' into
So why it can’t be inlined?
inline fun <reified T> Flow<T>.collectInMainBy(
crossinline onCollect: suspend (T) -> Unit,
crossinline onFailure: suspend (Throwable) -> Unit = { Timber.e(it, tag) }
) {
onEachCatching(onCollect, onFailure).launchInMain(lifecycleScope)
}
inline fun <reified T> Flow<T>.onEachCatching(
crossinline onEach: suspend (T) -> Unit,
crossinline onFailure: suspend (Throwable) -> Unit
) : Flow<T> {
return onEach {
onEach(it)
}.catch {
onFailure(it)
}
}
fun <T> Flow<T>.launchInMain(scope: CoroutineScope): Job = scope.launch(Dispatchers.Main) {
collect()
}
Call side:
buttonProceed.clicks().collectInMainBy(
onCollect = { viewModel.proceedButtonClicked() }
)
Karthikeyan1241997
08/09/2020, 1:44 PMHakob Vardanyan
08/09/2020, 1:49 PMcrossinline
to noinline
. Dunno why with crossinline
modificator the onFailure
block default implementation couldn’t be inlined.