New protocol for disabling exception suppression

joe.darcy at joe.darcy at
Fri Apr 1 18:21:32 PDT 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 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 

The fix was recently pushed [3] and will appear in a future JDK 7 build.



More information about the coin-dev mailing list