code: public synchronized Throwable initCause(Throwable cause) {
  
          if (this.containedException != null) {
              throw new IllegalStateException("Can't overwrite cause");
          }
  
          if (cause == this) {
              throw new IllegalArgumentException(
                  "Self-causation not permitted");
          }
  
          this.containedException = cause;
  
          return this;
      }
docs: Initializes the <i>cause</i> of this throwable to the specified value.
  (The cause is the throwable that caused this throwable to get thrown.)
  
  <p>This method can be called at most once.  It is generally called from
  within the constructor, or immediately after creating the
  throwable.  If this throwable was created
  with {@link #TransformerException(Throwable)} or
  {@link #TransformerException(String,Throwable)}, this method cannot be called
  even once.
  
  @param  cause the cause (which is saved for later retrieval by the
  {@link #getCause()} method).  (A <tt>null</tt> value is
  permitted, and indicates that the cause is nonexistent or
  unknown.)
  @return  a reference to this <code>Throwable</code> instance.
  @throws IllegalArgumentException if <code>cause</code> is this
  throwable.  (A throwable cannot
  be its own cause.)
  @throws IllegalStateException if this throwable was
  created with {@link #TransformerException(Throwable)} or
  {@link #TransformerException(String,Throwable)}, or this method has already
  been called on this throwable.