Make production mode stack traces match JRE spec more closely - Fix StackTraceElement#getFileName(), so that it returns null instead of "Unknown Source" - Fix StackTraceElement#getLineNumber(), so that it returns -1 instead of 0 - Fix StackTraceElement#toString(), so that lineNumber is omitted when it is unknown, so that "Unknown.foo(Unknown Source:0)" becomes "Unknown.foo(Unknown Source)" Review at http://gwt-code-reviews.appspot.com/1295802 Review by: scottb@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9568 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java index 5e13099..cee201c 100644 --- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java +++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -67,8 +67,8 @@ StackTraceElement[] stackTrace = new StackTraceElement[stack.length()]; for (int i = 0, j = stackTrace.length; i < j; i++) { - stackTrace[i] = new StackTraceElement("Unknown", stack.get(i), - "Unknown source", 0); + stackTrace[i] = new StackTraceElement("Unknown", stack.get(i), null, + LINE_NUMBER_UNKNOWN); } e.setStackTrace(stackTrace); } @@ -77,8 +77,8 @@ JsArrayString stack = StackTraceCreator.createStackTrace(); StackTraceElement[] stackTrace = new StackTraceElement[stack.length()]; for (int i = 0, j = stackTrace.length; i < j; i++) { - stackTrace[i] = new StackTraceElement("Unknown", stack.get(i), - "Unknown source", 0); + stackTrace[i] = new StackTraceElement("Unknown", stack.get(i), null, + LINE_NUMBER_UNKNOWN); } t.setStackTrace(stackTrace); } @@ -145,8 +145,8 @@ for (int i = 0, j = stackTrace.length; i < j; i++) { // Locations is also backwards String location = locations.get(j - i - 1); - String fileName = "Unknown source"; - int lineNumber = 0; + String fileName = null; + int lineNumber = LINE_NUMBER_UNKNOWN; if (location != null) { int idx = location.indexOf(':'); if (idx != -1) { @@ -361,6 +361,8 @@ } } + private static final int LINE_NUMBER_UNKNOWN = -1; + /** * Create a stack trace based on a JavaScriptException. This method should * only be called in Production Mode.
diff --git a/user/super/com/google/gwt/emul/java/lang/StackTraceElement.java b/user/super/com/google/gwt/emul/java/lang/StackTraceElement.java index 1e40735..4215e3c 100644 --- a/user/super/com/google/gwt/emul/java/lang/StackTraceElement.java +++ b/user/super/com/google/gwt/emul/java/lang/StackTraceElement.java
@@ -60,7 +60,8 @@ } public String toString() { - return className + "." + methodName + "(" + fileName + ":" + lineNumber - + ")"; + return className + "." + methodName + "(" + + (fileName != null ? fileName : "Unknown Source") + + (lineNumber >= 0 ? ":" + lineNumber : "") + ")"; } }