Project Coin: Disabling exception suppression
By Darcy-Oracle on Apr 01, 2011
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 discussed on
coin-dev, 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.
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
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 and will appear in a future JDK 7 build.