src/share/classes/java/lang/Throwable.java
Print this page
@@ -450,14 +450,19 @@
* {@link #Throwable(String,Throwable)}, or this method has already
* been called on this throwable.
* @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;
}
/**
@@ -1037,11 +1042,11 @@
* @throws NullPointerException if {@code exception} is {@code null}
* @since 1.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);
if (suppressedExceptions == null) // Suppressed exceptions not recorded