It doesn't feel very right to say the exception is the "cause" of the IAE.
If the user code reuses an exception instance "x", as reported by OP, there is a possibility that the IAE is later added as a suppressed exception to "x", forming a loop x->IAE->x. Zhong Yu On Thu, Apr 11, 2013 at 8:19 PM, Joe Darcy <joe.da...@oracle.com> wrote: > Hello, > > Please review the patch below to address > > 8012044: Give more information about self-suppression from > Throwable.addSuppressed > http://cr.openjdk.java.net/~darcy/8012044.0/ > > Thanks, > > -Joe > > diff -r 006a7a576fe9 src/share/classes/java/lang/Throwable.java > --- a/src/share/classes/java/lang/Throwable.java Thu Apr 11 12:22:23 2013 > +0900 > +++ b/src/share/classes/java/lang/Throwable.java Thu Apr 11 18:16:38 2013 > -0700 > @@ -1039,7 +1039,7 @@ > */ > public final synchronized void addSuppressed(Throwable exception) { > if (exception == this) > - throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE); > + throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE, > exception); > > if (exception == null) > throw new NullPointerException(NULL_CAUSE_MESSAGE); > diff -r 006a7a576fe9 test/java/lang/Throwable/SuppressedExceptions.java > --- a/test/java/lang/Throwable/SuppressedExceptions.java Thu Apr 11 > 12:22:23 2013 +0900 > +++ b/test/java/lang/Throwable/SuppressedExceptions.java Thu Apr 11 > 18:16:38 2013 -0700 > @@ -26,7 +26,7 @@ > > /* > * @test > - * @bug 6911258 6962571 6963622 6991528 7005628 > + * @bug 6911258 6962571 6963622 6991528 7005628 8012044 > * @summary Basic tests of suppressed exceptions > * @author Joseph D. Darcy > */ > @@ -48,7 +48,9 @@ > throwable.addSuppressed(throwable); > throw new RuntimeException("IllegalArgumentException for > self-suppresion not thrown."); > } catch (IllegalArgumentException iae) { > - ; // Expected > + // Expected to be here > + if (iae.getCause() != throwable) > + throw new RuntimeException("Bad cause after > self-suppresion."); > } > } > > > -Joe