Code review request for 8012044: Give more information about self-suppression from Throwable.addSuppressed
Joe Darcy
joe.darcy at oracle.com
Wed Apr 17 17:32:10 UTC 2013
On 04/14/2013 07:36 PM, Joe Darcy wrote:
> On 04/12/2013 07:29 PM, Jason Mehrens wrote:
>> Joe,
>> You'll have guard ise.addSuppressed against null. Looks good otherwise.
>>
>> private static void initCauseNull() {
>> Throwable t1 = new Throwable();
>> t1.initCause(null);
>> try {
>> t1.initCause(null);
>> } catch(IllegalStateException expect) {
>> }
>> }
>
> Right you are; check added and test updated in:
>
> http://cr.openjdk.java.net/~darcy/8012044.2/
>
> Full patch to Throwable:
[snip]
One more iteration; I've changed the initCause logic to suppress both
exceptions rather than using one as the cause:
http://cr.openjdk.java.net/~darcy/8012044.2
Patch to throwable:
--- old/src/share/classes/java/lang/Throwable.java 2013-04-14
19:33:23.000000000 -0700
+++ new/src/share/classes/java/lang/Throwable.java 2013-04-14
19:33:23.000000000 -0700
@@ -452,10 +452,15 @@
* @since 1.4
*/
public synchronized Throwable initCause(Throwable cause) {
- if (this.cause != this)
- throw new IllegalStateException("Can't overwrite cause");
+ if (this.cause != this) {
+ IllegalStateException ise =
+ new IllegalStateException("Can't overwrite cause", this);
+ if (cause != null)
+ ise.addSuppressed(cause);
+ throw ise;
+ }
if (cause == this)
- throw new IllegalArgumentException("Self-causation not
permitted");
+ throw new IllegalArgumentException("Self-causation not
permitted", this);
this.cause = cause;
return this;
}
@@ -1039,7 +1044,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);
The suppression mechanism is typically, but not exclusively, used by the
try-with-resources statement.
Thanks,
-Joe
More information about the core-libs-dev
mailing list