Reviewers: rjrjr,

Description:
See http://gwt-code-reviews.appspot.com/25801/show

Please review this at http://gwt-code-reviews.appspot.com/25803

Affected files:
   user/src/com/google/gwt/event/shared/HandlerManager.java
   user/test/com/google/gwt/event/shared/HandlerManagerTest.java


Index: user/src/com/google/gwt/event/shared/HandlerManager.java
===================================================================
--- user/src/com/google/gwt/event/shared/HandlerManager.java    (revision 5265)
+++ user/src/com/google/gwt/event/shared/HandlerManager.java    (working copy)
@@ -32,7 +32,7 @@
     * Interface for queued add/remove operations.
     */
    private interface AddOrRemoveCommand {
-    public void execute();
+    void execute();
    }

    /**
@@ -90,8 +90,8 @@

      private <H> void removeHandler(GwtEvent.Type<H> eventKey, H handler) {
        ArrayList<H> l = get(eventKey);
-      boolean result = l.remove(handler);
-      if (l.size() == 0) {
+      boolean result = (l == null) ? false : l.remove(handler);
+      if (result && l.size() == 0) {
          map.remove(eventKey);
        }
        assert result : "Tried to remove unknown handler: " + handler + "  
from "
Index: user/test/com/google/gwt/event/shared/HandlerManagerTest.java
===================================================================
--- user/test/com/google/gwt/event/shared/HandlerManagerTest.java       
(revision  
5265)
+++ user/test/com/google/gwt/event/shared/HandlerManagerTest.java       
(working  
copy)
@@ -260,6 +260,25 @@
      assertFired(mouse1, adaptor1, mouse3);
    }

+  public void testRemoveUnhandledType() {
+    final HandlerManager manager = new HandlerManager("bogus source");
+    HandlerRegistration reg = manager.addHandler(MouseDownEvent.getType(),
+        mouse1);
+    reg.removeHandler();
+
+    if (!GWT.isScript()) {
+      try {
+        reg.removeHandler();
+        fail("Should have thrown assertion error");
+      } catch (AssertionError e) {
+        /* pass */
+      }
+    } else {
+      reg.removeHandler();
+      /* pass, we didn't hit an NPE */
+    }
+  }
+
    public void testReverseOrder() {
      // Add some handlers to a manager
      final HandlerManager manager = new HandlerManager("source1", true);



--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to