diff options
author | Sven Gothel <[email protected]> | 2015-10-03 11:44:02 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2015-10-03 11:44:02 +0200 |
commit | 026875dd5256051d4e3504f1d9b01f7ce2bb70ff (patch) | |
tree | d7d1bd386c870787ffcf737ca6baaeaa6f73ef11 /src/java/com/jogamp/common/ExceptionUtils.java | |
parent | 48cef027ec727d3e03b78f577208d1ce10b705d1 (diff) |
Bug 1243 - Fix IOUtil.cleanPathString(..) special case ; Allow IOUtil and Uri to handle relative path
Fix IOUtil.cleanPathString(..) special case:
Special case '/a/./../b' -> '/b'
requires to resolve './' before '../'.
Allow IOUtil and Uri to handle relative path:
- IOUtil.getParentOf(..)
- IOUtil.cleanPathString(..)
Handle cases:
'a/./../b' -> 'b'
'.././b' -> '../b'
- Uri: Handle null scheme
Diffstat (limited to 'src/java/com/jogamp/common/ExceptionUtils.java')
-rw-r--r-- | src/java/com/jogamp/common/ExceptionUtils.java | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/java/com/jogamp/common/ExceptionUtils.java b/src/java/com/jogamp/common/ExceptionUtils.java index 108b466..295a59c 100644 --- a/src/java/com/jogamp/common/ExceptionUtils.java +++ b/src/java/com/jogamp/common/ExceptionUtils.java @@ -65,26 +65,26 @@ public class ExceptionUtils { void printStackTrace(final PrintStream s); } - public static int dumpCause(final PrintStream s, final String causeStr, Throwable cause, int causeDepth) { - for( ; null != cause; cause = cause.getCause() ) { + public static int dumpCause(final PrintStream s, final String causeStr, Throwable cause, int causeIdx, final int causeDepth, final int stackDepth) { + for(int i=0; null != cause && ( -1 == causeDepth || i < causeDepth ); cause = cause.getCause(), i++) { if( cause instanceof CustomStackTrace ) { - ((CustomStackTrace)cause).dumpCauseStack(s, causeStr, causeDepth); + ((CustomStackTrace)cause).dumpCauseStack(s, causeStr, causeIdx); } else { - s.println(causeStr+"["+causeDepth+"] by "+cause.getClass().getSimpleName()+": "+cause.getMessage()+" on thread "+Thread.currentThread().getName()); - dumpStack(s, cause.getStackTrace(), 0, -1); + s.println(causeStr+"["+causeIdx+"] by "+cause.getClass().getSimpleName()+": "+cause.getMessage()+" on thread "+Thread.currentThread().getName()); + dumpStack(s, cause.getStackTrace(), 0, stackDepth); } - causeDepth++; + causeIdx++; } - return causeDepth; + return causeIdx; } - public static void printStackTrace(final PrintStream s, final Throwable t) { + public static void printStackTrace(final PrintStream s, final Throwable t, final int causeDepth, final int stackDepth) { if( t instanceof CustomStackTrace ) { ((CustomStackTrace)t).printStackTrace(s); } else { s.println(t.getClass().getSimpleName()+": "+t.getMessage()+" on thread "+Thread.currentThread().getName()); - dumpStack(s, t.getStackTrace(), 0, -1); - dumpCause(s, "Caused", t.getCause(), 1); + dumpStack(s, t.getStackTrace(), 0, stackDepth); + dumpCause(s, "Caused", t.getCause(), 1, causeDepth, stackDepth); } } @@ -96,7 +96,17 @@ public class ExceptionUtils { * </p> */ public static void dumpThrowable(final String additionalDescr, final Throwable t) { + dumpThrowable(additionalDescr, t, -1, -1); + } + /** + * Dumps a {@link Throwable} in a decorating message including the current thread name, + * and its {@link #dumpStack(PrintStream, StackTraceElement[], int, int) stack trace}. + * <p> + * Implementation will iterate through all {@link Throwable#getCause() causes}. + * </p> + */ + public static void dumpThrowable(final String additionalDescr, final Throwable t, final int causeDepth, final int stackDepth) { System.err.print("Caught "+additionalDescr+" "); - printStackTrace(System.err, t); + printStackTrace(System.err, t, causeDepth, stackDepth); } } |