diff options
Diffstat (limited to 'runtime/src/org/aspectj/lang/SoftException.java')
-rw-r--r-- | runtime/src/org/aspectj/lang/SoftException.java | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/runtime/src/org/aspectj/lang/SoftException.java b/runtime/src/org/aspectj/lang/SoftException.java index 406eb5272..b1ac84cb4 100644 --- a/runtime/src/org/aspectj/lang/SoftException.java +++ b/runtime/src/org/aspectj/lang/SoftException.java @@ -1,6 +1,7 @@ /* ******************************************************************* * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). + * 2002 Palo Alto Research Center, Incorporated (PARC), + * 2004 Contributors. * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Common Public License v1.0 @@ -14,6 +15,9 @@ package org.aspectj.lang; +import java.io.PrintStream; +import java.io.PrintWriter; + /** * Wrapper for checked exceptions matched by a 'declare soft'. * You can soften checked exceptions at join points by using @@ -21,10 +25,29 @@ package org.aspectj.lang; * At the join points, any exceptions thrown which match * TypePattern will be wrapped in <code>SoftException</code> * and rethrown. You can get the original exception using - * <code>getWrappedThrowable()</code>. + * <code>getWrappedThrowable()</code> or + * <code>getCause()</code>. */ public class SoftException extends RuntimeException { - Throwable inner; + + private static final boolean HAVE_JAVA_14; + + static { + boolean java14 = false; + try { + Class.forName("java.nio.Buffer"); + java14 = true; + } catch (Throwable t) { + // still false; + } + HAVE_JAVA_14 = java14; + } + + // shouldn't field be private final, constructor default or private? + // but either would be a binary incompatible change. + + Throwable inner; + public SoftException(Throwable inner) { super(); this.inner = inner; @@ -33,4 +56,25 @@ public class SoftException extends RuntimeException { public Throwable getWrappedThrowable() { return inner; } public Throwable getCause() { return inner; } + public void printStackTrace() { + printStackTrace(System.err); + } + + public void printStackTrace(PrintStream stream) { + super.printStackTrace(stream); + final Throwable _inner = this.inner; + if (!HAVE_JAVA_14 && (null != _inner)) { + stream.print("Caused by: "); + _inner.printStackTrace(stream); + } + } + + public void printStackTrace(PrintWriter stream) { + super.printStackTrace(stream); + final Throwable _inner = this.inner; + if (!HAVE_JAVA_14 && (null != _inner)) { + stream.print("Caused by: "); + _inner.printStackTrace(stream); + } + } } |