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 -~----------~----~----~----~------~----~------~--~---