New protocol for disabling exception suppression

Rémi Forax forax at
Sun Apr 3 11:18:56 PDT 2011

On 04/02/2011 03:21 AM, joe.darcy at wrote:
> As part of the library support for the try-with-resources statement,
> several API changes were made to Throwable including an addSuppressed
> method to allow suppressed exceptions to be recorded. As previously
> discussed on coin-dev [1], to support VM needs for reusable exception
> objects, a protocol was devised to disable the suppression mechanism so
> that a zero-length array would be returned from getSuppressed even if
> addSuppressed was called with a valid argument. The mechanism was a bit
> of a kludge, relying on an initial call to addSuppressed with a null
> argument, and the design was called out as such. [2] I'm happy to report
> the JSR 334 expert group has devised a more elegant protocol to disable
> exception suppression: a new constructor is added to Throwable which
> supports disabling suppression. The existing constructors of Throwable
> always enable suppression and addSuppressed(null) now always throws a
> NullPointerException. A few exception and error types in the platform
> are allowed by behave as if their objects were created with suppression
> disabled.
> The fix was recently pushed [3] and will appear in a future JDK 7 build.
> -Joe

Reading the corresponding javadoc,
I've found that the constructor is protected. In my opinon, it should
be public. All the other constructors are public, you can instantiate
a Throwable but if you want a Throwable that don't store
suppressed exceptions, you have to subclass it.
I don't understand the rational of this decision.

> [1]
> [2]
> [3]


More information about the coin-dev mailing list