StackTraceDeobfuscator now extracts source file and (method declaration) line number information from
the provided symbol map file, when this information is not provided by optionally enabled stack trace emulation.
Fixes issues: 5682
Review at http://gwt-code-reviews.appspot.com/1175801
Review by: unnurg@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9342 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java b/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
index 46b3694..088e539 100644
--- a/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
+++ b/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
@@ -73,8 +73,22 @@
if (parts.length == 5) {
String[] ref = parse(
parts[0].substring(0, parts[0].lastIndexOf(')') + 1));
- return new StackTraceElement(
- ref[0], ref[1], ste.getFileName(), ste.getLineNumber());
+
+ // parts[3] contains the source file URI or "Unknown"
+ String filename = "Unknown".equals(parts[3]) ? null
+ : parts[3].substring(parts[3].lastIndexOf('/') + 1);
+
+ int lineNumber = ste.getLineNumber();
+ /*
+ * When lineNumber is zero, either because compiler.stackMode is not
+ * emulated or compiler.emulatedStack.recordLineNumbers is false, use
+ * the method declaration line number from the symbol map.
+ */
+ if (lineNumber == 0) {
+ lineNumber = Integer.parseInt(parts[4]);
+ }
+
+ return new StackTraceElement(ref[0], ref[1], filename, lineNumber);
}
}
// If anything goes wrong, just return the unobfuscated element