From db04fd2a5b80e47664ceae38a2e6587160230787 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Tue, 20 Jun 2023 17:03:06 +0200 Subject: [PATCH] Avoid setting field with reflection on a JDK class - fails on newer JDK versions --- .../fr/xephi/authme/util/ExceptionUtilsTest.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java b/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java index e6931b08..b42fa97f 100644 --- a/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java +++ b/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java @@ -40,10 +40,10 @@ public class ExceptionUtilsTest { @Test public void shouldHandleCircularCausesGracefully() { // given - IllegalStateException ise = new IllegalStateException(); - UnsupportedOperationException uoe = new UnsupportedOperationException(ise); + ExceptionWithSettableCause exceptionWithSettableCause = new ExceptionWithSettableCause(); + UnsupportedOperationException uoe = new UnsupportedOperationException(exceptionWithSettableCause); ReflectiveOperationException roe = new ReflectiveOperationException(uoe); - ReflectionTestUtils.setField(Throwable.class, ise, "cause", roe); + exceptionWithSettableCause.cause = roe; // when NullPointerException resultNpe = ExceptionUtils.findThrowableInCause(NullPointerException.class, uoe); @@ -65,4 +65,14 @@ public class ExceptionUtilsTest { // then assertThat(result, equalTo("[MalformedURLException]: Unrecognized URL format")); } + + private static final class ExceptionWithSettableCause extends Exception { + + Exception cause; + + @Override + public synchronized Throwable getCause() { + return cause; + } + } }