Author: jlaba...@google.com
Date: Tue Apr 21 10:27:39 2009
New Revision: 5266

Modified:
    trunk/user/src/com/google/gwt/event/shared/HandlerManager.java
    trunk/user/test/com/google/gwt/event/shared/HandlerManagerTest.java

Log:
Fixed a bug in HandlerManager where removing the last handler of a given  
EventType twice would result in an NPE because we assume that the list of  
event handlers is not null.  Now, this results in an AssertionError.

Patch by: jlabanca
Review by: rjrjr



Modified: trunk/user/src/com/google/gwt/event/shared/HandlerManager.java
==============================================================================
--- trunk/user/src/com/google/gwt/event/shared/HandlerManager.java       
(original)
+++ trunk/user/src/com/google/gwt/event/shared/HandlerManager.java      Tue Apr 
 
21 10:27:39 2009
@@ -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 "

Modified:  
trunk/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
==============================================================================
--- trunk/user/test/com/google/gwt/event/shared/HandlerManagerTest.java  
(original)
+++ trunk/user/test/com/google/gwt/event/shared/HandlerManagerTest.java Tue  
Apr 21 10:27:39 2009
@@ -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