aboutsummaryrefslogtreecommitdiffstats
path: root/yolean
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-12-01 17:06:42 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-12-01 17:49:22 +0100
commit0b8d21fe0c915057e6c88cab1b2e988d60c5a16f (patch)
tree3f03f81c21ba25065b1b59e501b2520d65bab98e /yolean
parentf2599280846073b144c4065bf25478138cc38b67 (diff)
Add helper method to rethrow checked as unchecked
Diffstat (limited to 'yolean')
-rw-r--r--yolean/abi-spec.json3
-rw-r--r--yolean/src/main/java/com/yahoo/yolean/Exceptions.java21
2 files changed, 23 insertions, 1 deletions
diff --git a/yolean/abi-spec.json b/yolean/abi-spec.json
index 4b68b2527b8..82bf59ebf87 100644
--- a/yolean/abi-spec.json
+++ b/yolean/abi-spec.json
@@ -40,7 +40,8 @@
"public static void uncheckAndIgnore(com.yahoo.yolean.Exceptions$RunnableThrowingIOException, java.lang.Class)",
"public static java.lang.Object uncheck(com.yahoo.yolean.Exceptions$SupplierThrowingIOException)",
"public static varargs java.lang.Object uncheck(com.yahoo.yolean.Exceptions$SupplierThrowingIOException, java.lang.String, java.lang.String[])",
- "public static java.lang.Object uncheckAndIgnore(com.yahoo.yolean.Exceptions$SupplierThrowingIOException, java.lang.Class)"
+ "public static java.lang.Object uncheckAndIgnore(com.yahoo.yolean.Exceptions$SupplierThrowingIOException, java.lang.Class)",
+ "public static java.lang.RuntimeException throwUnchecked(java.lang.Throwable)"
],
"fields": []
},
diff --git a/yolean/src/main/java/com/yahoo/yolean/Exceptions.java b/yolean/src/main/java/com/yahoo/yolean/Exceptions.java
index 063ba70c75d..c377ee3ac37 100644
--- a/yolean/src/main/java/com/yahoo/yolean/Exceptions.java
+++ b/yolean/src/main/java/com/yahoo/yolean/Exceptions.java
@@ -160,4 +160,25 @@ public class Exceptions {
public interface SupplierThrowingIOException<T> {
T get() throws IOException;
}
+
+ /**
+ * Allows treating checked exceptions as unchecked.
+ * Usage:
+ * throw throwUnchecked(e);
+ * The reason for the return type is to allow writing throw at the call site
+ * instead of just calling throwUnchecked. Just calling throwUnchecked
+ * means that the java compiler won't know that the statement will throw an exception,
+ * and will therefore complain on things such e.g. missing return value.
+ */
+ public static RuntimeException throwUnchecked(Throwable e) {
+ throwUncheckedImpl(e);
+ return new RuntimeException(); // Non-null return value to stop tooling from complaining about potential NPE
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T extends Throwable> void throwUncheckedImpl(Throwable t) throws T {
+ throw (T)t;
+ }
+
+
}