]> source.dussan.org Git - gwtquery.git/commitdiff
Fix a NPE in certain callback cases. Add a couple of useful and predefined functions.
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Sun, 14 Apr 2013 18:06:49 +0000 (20:06 +0200)
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>
Sun, 14 Apr 2013 18:06:49 +0000 (20:06 +0200)
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/Callbacks.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/Deferred.java

index c6d36d72666ce08f85d0fa8ab6bec07d8c3e97bc..23ee2254432f64d515346ef4ff479a8718565b44 100644 (file)
@@ -149,7 +149,7 @@ public class Callbacks {
   private boolean run(Object c, Object...o) {
     // Unbox array inside array when there is only an element.
     // It happens when running filters in Promise.then()
-    if (o.length == 1 && o[0].getClass().isArray()) {
+    if (o != null && o.length == 1 && o[0] != null && o[0].getClass().isArray()) {
       o = (Object[])o[0];
     }
     if (c instanceof Callback) {
index e025742643825b0330ecb446021effee6b678c40..c804784f59ae8c0e7025dd0ecf0b95960791037a 100644 (file)
@@ -87,10 +87,48 @@ public class Deferred implements Promise.Deferred {
         // run the function with the new args to resolve this deferred
         doIt.f();
       }
-    }    
+    }
     
     protected com.google.gwt.query.client.plugins.deferred.Deferred dfd;
 
+    /**
+     * Utility function which can be used inside classes extending this to
+     * resolve this deferred in a call to any other promise method.
+     *
+     * Example:
+     * <pre>
+     * new PromiseFunction() {
+     *   public void f(final Deferred dfd) {
+     *     anotherPromise.done( resolve );
+     *   }
+     * }
+     * </pre>
+     */
+    protected Function resolve = new Function() {
+      public void f() {
+        dfd.resolve(arguments);
+      };
+    };
+
+    /**
+     * Utility function which can be used inside classes extending this to
+     * reject this deferred in a call to any other promise method.
+     *
+     * Example:
+     * <pre>
+     * new PromiseFunction() {
+     *   public void f(final Deferred dfd) {
+     *     anotherPromise.done( reject );
+     *   }
+     * }
+     * </pre>
+     */
+    protected Function reject = new Function() {
+      public void f() {
+        dfd.reject(arguments);
+      };
+    };
+
     protected DeferredPromiseImpl() {
       dfd = new com.google.gwt.query.client.plugins.deferred.Deferred();
     }