Trap unchecked exceptions thrown by generators.

Patch by: cromwellian
Review by: me


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3598 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
index de4158a..2f97c36 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
@@ -45,19 +45,26 @@
     }
 
     long before = System.currentTimeMillis();
-    String className = generator.generate(logger, context, typeName);
-    long after = System.currentTimeMillis();
-    if (className == null) {
-      msg = "Generator returned null, so the requested type will be used as is";
-    } else {
-      msg = "Generator returned class '" + className + "'";
+    try {
+      String className = generator.generate(logger, context, typeName);
+      long after = System.currentTimeMillis();
+      if (className == null) {
+        msg = "Generator returned null, so the requested type will be used as is";
+      } else {
+        msg = "Generator returned class '" + className + "'";
+      }
+      logger.log(TreeLogger.DEBUG, msg, null);
+
+      msg = "Finished in " + (after - before) + " ms";
+      logger.log(TreeLogger.DEBUG, msg, null);
+
+      return className;
+    } catch (RuntimeException e) {
+      logger.log(TreeLogger.ERROR, "Generator '"
+          + generator.getClass().getName()
+          + "' threw threw an exception while rebinding '" + typeName + "'", e);
+      throw new UnableToCompleteException();
     }
-    logger.log(TreeLogger.DEBUG, msg, null);
-
-    msg = "Finished in " + (after - before) + " ms";
-    logger.log(TreeLogger.DEBUG, msg, null);
-
-    return className;
   }
 
   public String toString() {