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 : "") + ")";
}
}