From 3ce61b1b994a268b9d94fe250685cbd64c3e5119 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 3 Oct 2024 11:34:17 -0600 Subject: [PATCH] Don't reference ThreadDeath directly due to its future removal (#2878) `ThreadDeath` is deprecated for removal, so we can no longer reference it directly. --- vavr/src/main/java/io/vavr/control/Try.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/vavr/src/main/java/io/vavr/control/Try.java b/vavr/src/main/java/io/vavr/control/Try.java index 1e52c713d..331d5a81a 100644 --- a/vavr/src/main/java/io/vavr/control/Try.java +++ b/vavr/src/main/java/io/vavr/control/Try.java @@ -1696,7 +1696,7 @@ interface TryModule { static boolean isFatal(Throwable throwable) { return throwable instanceof InterruptedException || throwable instanceof LinkageError - || throwable instanceof ThreadDeath + || ThreadDeathResolver.isThreadDeath(throwable) || throwable instanceof VirtualMachineError; } @@ -1706,4 +1706,21 @@ static R sneakyThrow(Throwable t) throws T { throw (T) t; } + static class ThreadDeathResolver { + static final Class THREAD_DEATH_CLASS = resolve(); + + static boolean isThreadDeath(Throwable throwable) { + return THREAD_DEATH_CLASS != null && THREAD_DEATH_CLASS.isInstance(throwable); + } + + private static Class resolve() { + try { + return Class.forName("java.lang.ThreadDeath"); + } catch (ClassNotFoundException e) { + return null; + } + } + } } + +