]> source.dussan.org Git - gwtquery.git/commitdiff
Exceptions happening in functions were uncaugh when they were run in asynchronous...
authorManolo Carrasco <manolo@apache.org>
Sat, 18 Feb 2012 16:41:15 +0000 (16:41 +0000)
committerManolo Carrasco <manolo@apache.org>
Sat, 18 Feb 2012 16:41:15 +0000 (16:41 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/Function.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/QueuePlugin.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java

index 08f6415d8393ee37695c95a9935e41dadb307df6..ad6e1a75ea1699cbca40322b5412b97a2ecaff37 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.query.client;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.user.client.Event;
@@ -177,8 +178,7 @@ public abstract class Function {
    * Override this method for bound callbacks
    */
   public void f(Object... data) {
-    setData(data);
-    f();
+    fe(data);
   }
   
   /**
@@ -267,4 +267,73 @@ public abstract class Function {
     }
   }
 
+  /**
+   * Methods fe(...) should be used from asynchronous contexts so as we can
+   * catch the exception and send it to the GWT UncaughtExceptionHandler.
+   * They are intentionally final to avoid override them 
+   */
+  public final void fe() {
+    fe((Object)null);
+  }
+
+  /**
+   * Methods fe(...) should be used from asynchronous contexts so as we can
+   * catch the exception and send it to the GWT UncaughtExceptionHandler
+   * They are intentionally final to avoid override them 
+   */
+  public final void fe(Object data) {
+    fe(new Object[]{data});
+  }
+  
+  /**
+   * Methods fe(...) should be used from asynchronous contexts so as we can
+   * catch the exception and send it to the GWT UncaughtExceptionHandler
+   * They are intentionally final to avoid override them 
+   */
+  public final void fe(Object... data) {
+    setData(data);
+    if (GWT.getUncaughtExceptionHandler() != null) {
+      try {
+        f();
+      } catch (Exception e) {
+        GWT.getUncaughtExceptionHandler().onUncaughtException(e);
+      }
+      return;
+    }
+    f();
+  }
+
+  /**
+   * Methods fe(...) should be used from asynchronous contexts so as we can
+   * catch the exception and send it to the GWT UncaughtExceptionHandler
+   * They are intentionally final to avoid override them 
+   */
+  public final boolean fe(Event ev, Object  data) {
+    if (GWT.getUncaughtExceptionHandler() != null) {
+      try {
+        return f(ev, data);
+      } catch (Exception e) {
+        GWT.getUncaughtExceptionHandler().onUncaughtException(e);
+      }
+      return true;
+    }
+    return f(ev, data);
+  }
+  
+  /**
+   * Methods fe(...) should be used from asynchronous contexts so as we can
+   * catch the exception and send it to the GWT UncaughtExceptionHandler
+   * They are intentionally final to avoid override them 
+   */
+  public final void fe(com.google.gwt.dom.client.Element elem) {
+    if (GWT.getUncaughtExceptionHandler() != null) {
+      try {
+        f(elem.<com.google.gwt.dom.client.Element>cast());
+      } catch (Exception e) {
+        GWT.getUncaughtExceptionHandler().onUncaughtException(e);
+      }
+      return;
+    }
+    f(elem.<com.google.gwt.dom.client.Element>cast());
+  }
 }
index 3a461a2723c0b669a211bd6dc09687c10feddc4f..dc97b4b340ae4dd1e1dd27ad820b8a86aba94304 100644 (file)
@@ -262,7 +262,7 @@ public class QueuePlugin<T extends QueuePlugin<?>> extends GQuery {
       Object f = q.peek();
       if (f != null) {
         if (f instanceof Function) {
-          ((Function) f).f(elem.<com.google.gwt.dom.client.Element>cast());
+          ((Function) f).fe(elem);
         }
       }
     }
@@ -279,7 +279,7 @@ public class QueuePlugin<T extends QueuePlugin<?>> extends GQuery {
         q.add(func);
         if (q.size() == 1) {
           if (func instanceof Function) {
-            ((Function) func).f(elem.<com.google.gwt.dom.client.Element>cast());
+            ((Function) func).fe(elem);
           }
         }
       }
index 1328d77faa92c8113a0c4f90c6a9fa4f83fab3b1..7699c47671e01862f08666364add01feaea2036f 100644 (file)
@@ -71,7 +71,7 @@ public class EventsListener implements EventListener {
     public boolean fire(Event event) {
       if (times != 0) {
         times--;
-        return function.f(event, data);
+        return function.fe(event, data);
       }
       return true;
     }
@@ -92,7 +92,6 @@ public class EventsListener implements EventListener {
    */
   private static class LiveBindFunction extends BindFunction {
 
-    
     JsNamedArray<JsObjectArray<BindFunction>> bindFunctionBySelector;
 
     LiveBindFunction(int type, String namespace) {