Fixes issue #2607; TreeItemLogger now eagerly grabs exception info from a thrown exception to break lingering dependency on user code. Partial back-port from OOPHM.
Suggested by: zundel
Review by: zundel
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3609 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java b/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
index 6d648dc..a1b1b2d 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
@@ -16,6 +16,7 @@
package com.google.gwt.dev.util.log;
import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
import java.util.HashSet;
@@ -45,8 +46,12 @@
+ "amount of memory, use the -Xmx flag at startup (java -Xmx128M ...)";
public static String getStackTraceAsString(Throwable e) {
- // For each cause, print the requested number of entries of its stack trace,
- // being careful to avoid getting stuck in an infinite loop.
+ // Show the exception info for anything other than "UnableToComplete".
+ if (e == null || e instanceof UnableToCompleteException) {
+ return null;
+ }
+ // For each cause, print the requested number of entries of its stack
+ // trace, being careful to avoid getting stuck in an infinite loop.
//
StringBuffer message = new StringBuffer();
Throwable currentCause = e;
@@ -72,6 +77,13 @@
return message.toString();
}
+ protected static String getExceptionName(Throwable e) {
+ if (e == null || e instanceof UnableToCompleteException) {
+ return null;
+ }
+ return e.getClass().getSimpleName();
+ }
+
public int indexWithinMyParent;
private TreeLogger.Type logLevel = TreeLogger.ALL;
diff --git a/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java b/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
index 2c48f88..62fa5d0 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
@@ -41,7 +41,9 @@
* Represents an individual log event.
*/
public static class LogEvent {
- public final Throwable caught;
+ public final String exceptionDetail;
+
+ public final String exceptionName;
public final HelpInfo helpInfo;
@@ -57,12 +59,13 @@
public LogEvent(TreeItemLogger logger, boolean isBranchCommit, int index,
Type type, String message, Throwable caught, HelpInfo helpInfo) {
+ this.exceptionDetail = AbstractTreeLogger.getStackTraceAsString(caught);
+ this.exceptionName = AbstractTreeLogger.getExceptionName(caught);
this.logger = logger;
this.isBranchCommit = isBranchCommit;
this.index = index;
this.type = type;
this.message = message;
- this.caught = caught;
this.helpInfo = helpInfo;
}
@@ -161,13 +164,8 @@
//
String label = message;
if (label == null) {
- if (caught != null) {
- label = caught.getMessage();
-
- if (label == null || label.trim().length() == 0) {
- label = caught.toString();
- }
- }
+ assert (exceptionName != null);
+ label = exceptionName;
}
treeItem.setText(label);
diff --git a/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java b/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
index d21aa6e..595da54 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
@@ -15,7 +15,6 @@
*/
package com.google.gwt.dev.util.log;
-import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.TreeLogger.HelpInfo;
import com.google.gwt.dev.shell.BrowserWidget;
import com.google.gwt.dev.util.log.TreeItemLogger.LogEvent;
@@ -317,11 +316,8 @@
// Show the exception info for anything other than "UnableToComplete".
//
- if (logEvent != null && logEvent.caught != null) {
- if (!(logEvent.caught instanceof UnableToCompleteException)) {
- String stackTrace = AbstractTreeLogger.getStackTraceAsString(logEvent.caught);
- sb.append(stackTrace);
- }
+ if (logEvent != null && logEvent.exceptionDetail != null) {
+ sb.append(logEvent.exceptionDetail);
}
details.setText(sb.toString());