summaryrefslogtreecommitdiffstats
path: root/runtime/src/org/aspectj/lang/SoftException.java
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/org/aspectj/lang/SoftException.java')
-rw-r--r--runtime/src/org/aspectj/lang/SoftException.java50
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);
+ }
+ }
}