Refactors event infrastructure, to simplify the firing mechanism and allow users
to cherry-pick the non-Dom events.
Patch by: jgw
Review by: ecc, rjrjr


git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4494 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/event/Event.gwt.xml b/user/src/com/google/gwt/event/Event.gwt.xml
index 44c8ff4..8c5c4e8 100644
--- a/user/src/com/google/gwt/event/Event.gwt.xml
+++ b/user/src/com/google/gwt/event/Event.gwt.xml
@@ -1,6 +1,5 @@
 <module>

-    <!-- This module could be broken down into much finer detail -->

-    <source path="shared"/> 

-    <source path="logical/shared"/>

-    <source path="dom/client"/> 

-</module>
\ No newline at end of file
+	<inherits name="com.google.gwt.event.EventBase" />

+	<inherits name="com.google.gwt.event.dom.DomEvent" />

+	<inherits name="com.google.gwt.event.logical.LogicalEvent" />

+</module>

diff --git a/user/src/com/google/gwt/event/EventBase.gwt.xml b/user/src/com/google/gwt/event/EventBase.gwt.xml
new file mode 100644
index 0000000..9f0de72
--- /dev/null
+++ b/user/src/com/google/gwt/event/EventBase.gwt.xml
@@ -0,0 +1,5 @@
+<module>
+	<inherits name="com.google.gwt.core.Core" />
+
+	<source path="shared" />
+</module>
diff --git a/user/src/com/google/gwt/event/dom/DomEvent.gwt.xml b/user/src/com/google/gwt/event/dom/DomEvent.gwt.xml
new file mode 100644
index 0000000..e2c233c
--- /dev/null
+++ b/user/src/com/google/gwt/event/dom/DomEvent.gwt.xml
@@ -0,0 +1,6 @@
+<module>
+	<inherits name="com.google.gwt.event.EventBase" />
+	<inherits name="com.google.gwt.user.Dom" />
+
+  <source path="client"/>
+</module>
diff --git a/user/src/com/google/gwt/event/dom/client/DomEvent.java b/user/src/com/google/gwt/event/dom/client/DomEvent.java
index b8b7135..c4ff6f4 100644
--- a/user/src/com/google/gwt/event/dom/client/DomEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DomEvent.java
@@ -17,7 +17,7 @@
 
 import com.google.gwt.event.shared.EventHandler;
 import com.google.gwt.event.shared.GwtEvent;
-import com.google.gwt.event.shared.HandlerManager;
+import com.google.gwt.event.shared.HasHandlers;
 import com.google.gwt.user.client.Event;
 
 /**
@@ -31,6 +31,7 @@
  */
 public abstract class DomEvent<H extends EventHandler> extends GwtEvent<H>
     implements HasNativeEvent {
+
   /**
    * Type class used by dom event subclasses. Type is specialized for dom in
    * order to carry information about the native event.
@@ -53,7 +54,7 @@
 
     /**
      * This constructor allows dom event types to be triggered by the
-     * {@link DomEvent#fireNativeEvent(Event, HandlerManager)} method. It should
+     * {@link DomEvent#fireNativeEvent(Event, HasHandlers)} method. It should
      * only be used by implementors supporting new dom events.
      * <p>
      * Any such dom event type must act as a flyweight around a native event
@@ -109,7 +110,7 @@
    * @param handlers the event manager containing the handlers to fire (may be
    *          null)
    */
-  public static void fireNativeEvent(Event nativeEvent, HandlerManager handlers) {
+  public static void fireNativeEvent(Event nativeEvent, HasHandlers handlers) {
     assert nativeEvent != null : "nativeEvent must not be null";
     if (registered != null && handlers != null) {
       final DomEvent.Type<?> typeKey = registered.unsafeGet(nativeEvent.getType());
diff --git a/user/src/com/google/gwt/event/logical/LogicalEvent.gwt.xml b/user/src/com/google/gwt/event/logical/LogicalEvent.gwt.xml
new file mode 100644
index 0000000..00485a7
--- /dev/null
+++ b/user/src/com/google/gwt/event/logical/LogicalEvent.gwt.xml
@@ -0,0 +1,5 @@
+<module>
+	<inherits name="com.google.gwt.event.EventBase" />
+
+	<source path="shared" />
+</module>
diff --git a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
index 62066a2..3fe1144 100644
--- a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;
 
 import com.google.gwt.event.shared.GwtEvent;
-import com.google.gwt.event.shared.HandlerManager;
 
 /**
  * Represents a before selection event.
@@ -45,13 +44,10 @@
       HasBeforeSelectionHandlers<I> source, I item) {
     // If no handlers exist, then type can be null.
     if (TYPE != null) {
-      HandlerManager handlers = source.getHandlers();
-      if (handlers != null) {
-        BeforeSelectionEvent<I> event = new BeforeSelectionEvent<I>();
-        event.setItem(item);
-        handlers.fireEvent(event);
-        return event;
-      }
+      BeforeSelectionEvent<I> event = new BeforeSelectionEvent<I>();
+      event.setItem(item);
+      source.fireEvent(event);
+      return event;
     }
     return null;
   }
diff --git a/user/src/com/google/gwt/event/logical/shared/CloseEvent.java b/user/src/com/google/gwt/event/logical/shared/CloseEvent.java
index 85006a7..aa71fd1 100644
--- a/user/src/com/google/gwt/event/logical/shared/CloseEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/CloseEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 

 /**

  * Represents a close event.

@@ -53,11 +52,8 @@
   public static <T> void fire(HasCloseHandlers<T> source, T target,

       boolean autoClosed) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null) {

-        CloseEvent<T> event = new CloseEvent<T>(target, autoClosed);

-        handlers.fireEvent(event);

-      }

+      CloseEvent<T> event = new CloseEvent<T>(target, autoClosed);

+      source.fireEvent(event);

     }

   }

 

diff --git a/user/src/com/google/gwt/event/logical/shared/HighlightEvent.java b/user/src/com/google/gwt/event/logical/shared/HighlightEvent.java
index 38f785f..ab8ed2e 100644
--- a/user/src/com/google/gwt/event/logical/shared/HighlightEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/HighlightEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 import com.google.gwt.event.shared.HasHandlers;

 

 /**

@@ -42,11 +41,8 @@
   public static <V, S extends HasHighlightHandlers<V> & HasHandlers> void fire(

       S source, V highlighted) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null) {

-        HighlightEvent<V> event = new HighlightEvent<V>(highlighted);

-        handlers.fireEvent(event);

-      }

+      HighlightEvent<V> event = new HighlightEvent<V>(highlighted);

+      source.fireEvent(event);

     }

   }

 

diff --git a/user/src/com/google/gwt/event/logical/shared/OpenEvent.java b/user/src/com/google/gwt/event/logical/shared/OpenEvent.java
index a6a11c2..1e6c20e 100644
--- a/user/src/com/google/gwt/event/logical/shared/OpenEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/OpenEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 

 /**

  * Represents a open event.

@@ -40,11 +39,8 @@
    */

   public static <T> void fire(HasOpenHandlers<T> source, T target) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null) {

-        OpenEvent<T> event = new OpenEvent<T>(target);

-        handlers.fireEvent(event);

-      }

+      OpenEvent<T> event = new OpenEvent<T>(target);

+      source.fireEvent(event);

     }

   }

 

diff --git a/user/src/com/google/gwt/event/logical/shared/ResizeEvent.java b/user/src/com/google/gwt/event/logical/shared/ResizeEvent.java
index a931456..6ca64e6 100644
--- a/user/src/com/google/gwt/event/logical/shared/ResizeEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/ResizeEvent.java
@@ -17,7 +17,6 @@
 package com.google.gwt.event.logical.shared;
 
 import com.google.gwt.event.shared.GwtEvent;
-import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HasHandlers;
 
 /**
@@ -41,11 +40,8 @@
   public static <S extends HasResizeHandlers & HasHandlers> void fire(S source,
       int width, int height) {
     if (TYPE != null) {
-      HandlerManager handlers = source.getHandlers();
-      if (handlers != null) {
-        ResizeEvent event = new ResizeEvent(width, height);
-        handlers.fireEvent(event);
-      }
+      ResizeEvent event = new ResizeEvent(width, height);
+      source.fireEvent(event);
     }
   }
 
diff --git a/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java b/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
index 967b557..a482ae6 100644
--- a/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 

 /**

  * Represents a selection event.

@@ -41,11 +40,8 @@
    */

   public static <I> void fire(HasSelectionHandlers<I> source, I selectedItem) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null) {

-        SelectionEvent<I> event = new SelectionEvent<I>(selectedItem);

-        handlers.fireEvent(event);

-      }

+      SelectionEvent<I> event = new SelectionEvent<I>(selectedItem);

+      source.fireEvent(event);

     }

   }

 

diff --git a/user/src/com/google/gwt/event/logical/shared/ShowRangeEvent.java b/user/src/com/google/gwt/event/logical/shared/ShowRangeEvent.java
index 5733bff..81337d9 100644
--- a/user/src/com/google/gwt/event/logical/shared/ShowRangeEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/ShowRangeEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 import com.google.gwt.event.shared.HasHandlers;

 

 /**

@@ -44,11 +43,8 @@
   public static <V, S extends HasShowRangeHandlers<V> & HasHandlers> void fire(

       S source, V start, V end) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null) {

-        ShowRangeEvent<V> event = new ShowRangeEvent<V>(start, end);

-        handlers.fireEvent(event);

-      }

+      ShowRangeEvent<V> event = new ShowRangeEvent<V>(start, end);

+      source.fireEvent(event);

     }

   }

 

diff --git a/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java b/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
index ab32e66..e5d8368 100644
--- a/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
@@ -16,7 +16,6 @@
 package com.google.gwt.event.logical.shared;

 

 import com.google.gwt.event.shared.GwtEvent;

-import com.google.gwt.event.shared.HandlerManager;

 

 /**

  * Represents a value change event.

@@ -40,11 +39,8 @@
    */

   public static <I> void fire(HasValueChangeHandlers<I> source, I value) {

     if (TYPE != null) {

-      HandlerManager handlers = source.getHandlers();

-      if (handlers != null && handlers.isEventHandled(TYPE)) {

-        ValueChangeEvent<I> event = new ValueChangeEvent<I>(value);

-        handlers.fireEvent(event);

-      }

+      ValueChangeEvent<I> event = new ValueChangeEvent<I>(value);

+      source.fireEvent(event);

     }

   }

 

@@ -62,7 +58,7 @@
       I oldValue, I newValue) {

     if (shouldFire(source, oldValue, newValue)) {

       ValueChangeEvent<I> event = new ValueChangeEvent<I>(newValue);

-      source.getHandlers().fireEvent(event);

+      source.fireEvent(event);

     }

   }

 

@@ -90,7 +86,7 @@
    */

   protected static <I> boolean shouldFire(HasValueChangeHandlers<I> source,

       I oldValue, I newValue) {

-    return TYPE != null && source.getHandlers() != null && oldValue != newValue

+    return TYPE != null && oldValue != newValue

         && (oldValue == null || !oldValue.equals(newValue));

   }

 

diff --git a/user/src/com/google/gwt/event/shared/HandlerManager.java b/user/src/com/google/gwt/event/shared/HandlerManager.java
index fc1a0a3..00a831f 100644
--- a/user/src/com/google/gwt/event/shared/HandlerManager.java
+++ b/user/src/com/google/gwt/event/shared/HandlerManager.java
@@ -15,15 +15,14 @@
  */
 package com.google.gwt.event.shared;
 
-import com.google.gwt.event.shared.GwtEvent.Type;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.RootPanel;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.google.gwt.event.shared.GwtEvent.Type;
+import com.google.gwt.user.client.Command;
+
 /**
  * Manager responsible for adding handlers to event sources and firing those
  * handlers on passed in events.
@@ -139,6 +138,7 @@
     } else {
       doAdd(type, handler);
     }
+
     return new DefaultHandlerRegistration(this, type, handler);
   }
 
@@ -151,7 +151,6 @@
    * 
    * @param event the event
    */
-
   public void fireEvent(GwtEvent<?> event) {
     // If it not live we should revive it.
     if (!event.isLive()) {
@@ -244,8 +243,7 @@
    * @return a map of all handlers in this handler manager
    */
   Map<GwtEvent.Type<?>, ArrayList<?>> createHandlerInfo() {
-    HandlerManager manager = RootPanel.get().getHandlers();
-    return manager.registry.map;
+    return registry.map;
   }
 
   private void defer(Command command) {
diff --git a/user/src/com/google/gwt/event/shared/HasHandlers.java b/user/src/com/google/gwt/event/shared/HasHandlers.java
index b57a40d..39be193 100644
--- a/user/src/com/google/gwt/event/shared/HasHandlers.java
+++ b/user/src/com/google/gwt/event/shared/HasHandlers.java
@@ -13,20 +13,29 @@
  * License for the specific language governing permissions and limitations under

  * the License.

  */

-

 package com.google.gwt.event.shared;

 

+import com.google.gwt.event.shared.GwtEvent.Type;

 

 /**

- * An object that implements this interface has a collection of handlers stored

- * in a {@link HandlerManager}.

+ * An object that implements this interface has a collection of event handlers

+ * associated with it.

  */

-

 public interface HasHandlers {

+

   /**

-   * Gets this object's handlers. May return null if there are no handlers.

+   * Determines whether the there are any handlers of the given type. This may

+   * be used to avoid creating events for which there are no handlers.

    * 

-   * @return the handlers

+   * @param type the type of event to be queried

+   * @return <code>true</code> if there are any handlers for this event type

    */

-  HandlerManager getHandlers();

+  boolean isEventHandled(Type<?> type);

+

+  /**

+   * Fires the given event to all the appropriate handlers.

+   * 

+   * @param event the event to be fired

+   */

+  void fireEvent(GwtEvent<?> event);

 }

diff --git a/user/src/com/google/gwt/user/User.gwt.xml b/user/src/com/google/gwt/user/User.gwt.xml
index 70216b7..d701223 100644
--- a/user/src/com/google/gwt/user/User.gwt.xml
+++ b/user/src/com/google/gwt/user/User.gwt.xml
@@ -41,7 +41,7 @@
    <inherits name="com.google.gwt.user.Tree"/>
    <inherits name="com.google.gwt.user.Hyperlink"/>
    <inherits name="com.google.gwt.user.datepicker.DatePicker"/>
-    <super-source path="translatable"/>
-    <source path="client"/>
-    
+
+   <super-source path="translatable"/>
+   <source path="client"/>
 </module>
diff --git a/user/src/com/google/gwt/user/client/impl/HistoryImpl.java b/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
index 62e7c75..e25bbf9 100644
--- a/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
@@ -20,9 +20,11 @@
 import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.GwtEvent;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.event.shared.HasHandlers;
+import com.google.gwt.event.shared.GwtEvent.Type;
 
 /**
  * Native implementation associated with
@@ -54,6 +56,10 @@
     return handlers.addHandler(ValueChangeEvent.getType(), handler);
   }
 
+  public void fireEvent(GwtEvent<?> event) {
+    handlers.fireEvent(event);
+  }
+
   /**
    * Fires the {@link ValueChangeEvent} to all handlers with the given tokens.
    */
@@ -67,6 +73,10 @@
 
   public abstract boolean init();
 
+  public boolean isEventHandled(Type<?> type) {
+    return handlers.isEventHandled(type);
+  }
+
   public final void newItem(String historyToken, boolean issueEvent) {
     historyToken = (historyToken == null) ? "" : historyToken;
     if (!historyToken.equals(getToken())) {
diff --git a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
index 321815d..8e32780 100644
--- a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
@@ -528,7 +528,7 @@
   @SuppressWarnings("unchecked")

   static <H extends EventHandler> void baseRemove(Widget eventSource,

       EventListener listener, Type... keys) {

-    HandlerManager manager = eventSource.getHandlers();

+    HandlerManager manager = eventSource.getHandlerManager();

     if (manager != null) {

       // This is a direct copy of the baseRemove from

       // com.google.gwt.user.client.ListenerWrapper. Change in parallel.

diff --git a/user/src/com/google/gwt/user/client/ui/Widget.java b/user/src/com/google/gwt/user/client/ui/Widget.java
index e544e6a..e0f3676 100644
--- a/user/src/com/google/gwt/user/client/ui/Widget.java
+++ b/user/src/com/google/gwt/user/client/ui/Widget.java
@@ -32,6 +32,7 @@
  * {@link com.google.gwt.user.client.ui.Panel panels}.
  */
 public class Widget extends UIObject implements EventListener, HasHandlers {
+
   /**
    * A bit-map of the events that should be sunk when the widget is attached to
    * the DOM. (We delay the sinking of events to improve startup performance.)
@@ -45,13 +46,10 @@
   private Widget parent;
   private HandlerManager handlerManager;
 
-  /**
-   * Returns this widget's {@link HandlerManager} used for event management.
-   * 
-   * @return the handler manager
-   */
-  public final HandlerManager getHandlers() {
-    return handlerManager;
+  public void fireEvent(GwtEvent<?> event) {
+    if (handlerManager != null) {
+      handlerManager.fireEvent(event);
+    }
   }
 
   /**
@@ -74,16 +72,6 @@
     return attached;
   }
 
-  /**
-   * Returns true if the widget has handlers of the given type. Used by some
-   * widget implementations to be lazy about initializing dom event handlers
-   * (e.g. a click handler on a checkbox) until the first relevant logical event
-   * handler is attached (e.g. in the <code>addValueChangeHandler</code>
-   * method).
-   * 
-   * @param type the event type
-   * @return true if the widget has handlers of the give type
-   */
   public boolean isEventHandled(GwtEvent.Type<?> type) {
     return handlerManager != null && handlerManager.isEventHandled(type);
   }
@@ -106,7 +94,7 @@
           return;
         }
     }
-    DomEvent.fireNativeEvent(event, handlerManager);
+    DomEvent.fireNativeEvent(event, this);
   }
 
   /**
@@ -215,18 +203,6 @@
   }
 
   /**
-   * Fires an event. Usually used when passing an event from one source to
-   * another.
-   * 
-   * @param event the event
-   */
-  protected void fireEvent(GwtEvent<?> event) {
-    if (handlerManager != null) {
-      handlerManager.fireEvent(event);
-    }
-  }
-
-  /**
    * Has this widget ever been attached?
    * 
    * @return true if this widget ever been attached to the DOM, false otherwise
@@ -328,6 +304,10 @@
         : handlerManager;
   }
 
+  HandlerManager getHandlerManager() {
+    return handlerManager;
+  }
+
   /**
    * Gets the panel-defined layout data associated with this widget.
    * 
diff --git a/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java b/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
index 940637a..75586ef 100644
--- a/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
+++ b/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
@@ -41,7 +41,7 @@
   public static <S extends HasValueChangeHandlers<Date> & HasHandlers> void fireIfNotEqualDates(

       S source, Date oldValue, Date newValue) {

     if (ValueChangeEvent.shouldFire(source, oldValue, newValue)) {

-      source.getHandlers().fireEvent(new DateChangeEvent(newValue));

+      source.fireEvent(new DateChangeEvent(newValue));

     }

   }

 

diff --git a/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java b/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
index 6039eea..41c8828 100644
--- a/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
@@ -81,14 +81,14 @@
 
   public void testEvents() {
     final DisclosurePanel panel = createTestPanel();
-    assertEquals(1, panel.getHandlers().getHandlerCount(CloseEvent.getType()));
+    assertEquals(1, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
     panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
 
       public void onClose(CloseEvent<DisclosurePanel> event) {
         // for now nothing.
       }
     });
-    assertEquals(2, panel.getHandlers().getHandlerCount(CloseEvent.getType()));
+    assertEquals(2, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
   }
 
   /**
@@ -126,8 +126,8 @@
     panel.addEventHandler(handleA);
     panel.addEventHandler(handleB);
     // There is one to begin with.
-    assertEquals(3, panel.getHandlers().getHandlerCount(CloseEvent.getType()));
-    assertEquals(3, panel.getHandlers().getHandlerCount(OpenEvent.getType()));
+    assertEquals(3, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
+    assertEquals(3, panel.getHandlerManager().getHandlerCount(OpenEvent.getType()));
 
     panel.setOpen(true);
     // We expect onOpen to fire and onClose to not fire.
@@ -144,8 +144,8 @@
     aDidFire[OPEN] = bDidFire[CLOSE] = false;
 
     panel.removeEventHandler(handleB);
-    assertEquals(2, panel.getHandlers().getHandlerCount(OpenEvent.getType()));
-    assertEquals(2, panel.getHandlers().getHandlerCount(CloseEvent.getType()));
+    assertEquals(2, panel.getHandlerManager().getHandlerCount(OpenEvent.getType()));
+    assertEquals(2, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
 
     panel.setOpen(true);
     panel.setOpen(false);
diff --git a/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java b/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
index b8c5361..ca2c335 100644
--- a/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
+++ b/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
@@ -18,8 +18,10 @@
 

 import com.google.gwt.event.logical.shared.ValueChangeEvent;

 import com.google.gwt.event.logical.shared.ValueChangeHandler;

+import com.google.gwt.event.shared.GwtEvent;

 import com.google.gwt.event.shared.HandlerManager;

 import com.google.gwt.event.shared.HandlerRegistration;

+import com.google.gwt.event.shared.GwtEvent.Type;

 import com.google.gwt.user.client.ui.DateValueChangeTester;

 import com.google.gwt.user.client.ui.HasValue;

 

@@ -41,6 +43,10 @@
       return handlers.addHandler(ValueChangeEvent.getType(), handler);

     }

 

+    public void fireEvent(GwtEvent<?> event) {

+      handlers.fireEvent(event);

+    }

+

     public HandlerManager getHandlers() {

       return handlers;

     }

@@ -49,6 +55,10 @@
       return value;

     }

 

+    public boolean isEventHandled(Type<?> type) {

+      return handlers.isEventHandled(type);

+    }

+

     public void setValue(Date value) {

       setValue(value, false);

     }

@@ -65,5 +75,4 @@
   public void testValueChangeViaHasValue() {

     new DateValueChangeTester(new MockWidget()).run();

   }

-

 }