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

Reply via email to