guava
guava copied to clipboard
Make various classes catch `Exception` instead of `RuntimeException` even when only `RuntimeException` is theoretically possible.
Make various classes catch Exception instead of RuntimeException even when only RuntimeException is theoretically possible.
In fact, because checked exceptions are a Java-source-language feature (rather than a JVM feature), it's possible to throw them when you're not "supposed to," either through tricky Java code or more naturally through other languages, such as Kotlin.
We have seen this happening a few times in tests. This causes exceptions to slip past the catch blocks that are meant to handle them. This could cause operations to hang, such as when one listener of a ListenableFuture throws an exception, preventing subsequent listeners (such as a listener that powers Futures.transform) from running.
I didn't cover every catch (RuntimeException ...) block in our codebase, but I tried to get the ones that looked most likely to be affected.
RELNOTES=Changed various classes to catch Exception instead of RuntimeException even when only RuntimeException is theoretically possible.