kartoffelsup
02/16/2019, 12:11 PMraulraja
02/16/2019, 1:06 PMNonFatal
which we need to avoid catching errors like SOE Linkage errors etc that the user can't recover from.raulraja
02/16/2019, 1:07 PMraulraja
02/16/2019, 1:08 PMraulraja
02/16/2019, 1:08 PMraulraja
02/16/2019, 1:08 PMTry
should not be part of Arrow and I plan to make a proposal previous to 1.0 to get rid of itkartoffelsup
02/16/2019, 1:28 PMraulraja
02/16/2019, 3:09 PMraulraja
02/16/2019, 3:12 PMwhen
. It could be as easy as implementing something like:
internal fun <A> Throwable.nonFatal(): NonFatal =
if (isNonFatal()) NonFatal(this) else throw this
kartoffelsup
02/16/2019, 3:14 PMraulraja
02/16/2019, 3:14 PMraulraja
02/16/2019, 3:14 PMraulraja
02/16/2019, 3:14 PMkartoffelsup
02/16/2019, 3:15 PMkotlin
/**
* Extractor of non-fatal Throwables. Will not match fatal errors like `VirtualMachineError`
* (for example, `OutOfMemoryError` and `StackOverflowError`, subclasses of `VirtualMachineError`), `ThreadDeath`,
* `LinkageError`, `InterruptedException`.
*/
object NonFatal {
/**
* @return true if the provided `Throwable` is to be considered non-fatal, or false if it is to be considered fatal
*/
operator fun invoke(t: Throwable): Boolean =
when (t) {
is VirtualMachineError, is ThreadDeath, is InterruptedException, is LinkageError -> false
else -> true
}
}
And updated all production code places that catch a Throwable to if(NonFatal(t)) [ doIt } { else throw t}
or do you prefer the Throwable extension function?raulraja
02/16/2019, 3:17 PMraulraja
02/16/2019, 3:18 PMraulraja
02/16/2019, 3:19 PMfun Throwable.nonFatal(): Throwable =
if NonFatal(this) this else throw this
raulraja
02/16/2019, 3:19 PMraulraja
02/16/2019, 3:19 PMkartoffelsup
02/16/2019, 3:20 PMraulraja
02/16/2019, 3:20 PMraiseError
implementations and places that currently capture a Throwable via try / catch
raulraja
02/16/2019, 3:20 PMraulraja
02/16/2019, 3:20 PMkartoffelsup
02/16/2019, 3:41 PMraulraja
02/16/2019, 3:54 PMraulraja
02/16/2019, 3:54 PMdmcg
02/19/2019, 8:34 AMkartoffelsup
02/19/2019, 8:57 AMdmcg
02/19/2019, 9:00 AM