Avoid implicit inter-dependencies between DOM, History, Window and Widgets
through BaseListenerWrapper by moving things to where they're used.
Change-Id: I44ea5f26c96716879b2a23331cafc26a63644e89
Review-Link: https://gwt-review.googlesource.com/#/c/1241/
Review by: mdempsky@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11586 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/api-checker/config/gwt25_26userApi.conf b/tools/api-checker/config/gwt25_26userApi.conf
index 4528771..ce95c2e 100644
--- a/tools/api-checker/config/gwt25_26userApi.conf
+++ b/tools/api-checker/config/gwt25_26userApi.conf
@@ -150,3 +150,7 @@
# Removed deprecated benchmark infra
com.google.gwt.benchmarks.client MISSING
+
+# Split BaseListenerWrapper
+com.google.gwt.user.client.BaseListenerWrapper::getSource(Lcom/google/gwt/event/shared/GwtEvent;) MISSING
+com.google.gwt.user.client.BaseListenerWrapper::setSource(Lcom/google/gwt/user/client/ui/Widget;) MISSING
diff --git a/user/src/com/google/gwt/user/client/BaseListenerWrapper.java b/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
index 059e3f5..a7032cf 100644
--- a/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
@@ -20,14 +20,9 @@
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
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.GwtEvent.Type;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.ui.Widget;
/**
* Legacy listener support hierarchy root.
@@ -39,57 +34,11 @@
* code in one place, for easy deletion when Listener methods are deleted.
*
* @param <T> listener type to be wrapped
- * @deprecated will be removed in GWT 2.0 with the handler listeners themselves
+ * @deprecated will be removed in GWT 2.7 with the handler listeners themselves
*/
@Deprecated
public abstract class BaseListenerWrapper<T> implements EventHandler {
- static class NativePreview extends BaseListenerWrapper<EventPreview>
- implements Event.NativePreviewHandler {
- @Deprecated
- public static void add(EventPreview listener) {
- Event.addNativePreviewHandler(new NativePreview(listener));
- }
-
- public static void remove(EventPreview listener) {
- baseRemove(Event.handlers, listener, NativePreviewEvent.getType());
- }
-
- private NativePreview(EventPreview listener) {
- super(listener);
- }
-
- public void onPreviewNativeEvent(NativePreviewEvent event) {
- // The legacy EventHandler should only fire if it is on the top of the
- // stack (ie. the last one added).
- if (event.isFirstHandler()) {
- if (!listener.onEventPreview(Event.as(event.getNativeEvent()))) {
- event.cancel();
- }
- }
- }
- }
-
- static class WrapHistory extends BaseListenerWrapper<HistoryListener>
- implements ValueChangeHandler<String> {
- @Deprecated
- public static void add(HistoryListener listener) {
- History.addValueChangeHandler(new WrapHistory(listener));
- }
-
- public static void remove(HandlerManager manager, HistoryListener listener) {
- baseRemove(manager, listener, ValueChangeEvent.getType());
- }
-
- private WrapHistory(HistoryListener listener) {
- super(listener);
- }
-
- public void onValueChange(ValueChangeEvent<String> event) {
- listener.onHistoryChanged(event.getValue());
- }
- }
-
static class WrapWindowClose extends BaseListenerWrapper<WindowCloseListener>
implements Window.ClosingHandler, CloseHandler<Window> {
@Deprecated
@@ -196,8 +145,6 @@
*/
final T listener;
- private Widget source;
-
/**
* Creates a new listener wrapper.
*
@@ -208,16 +155,6 @@
}
/**
- * Sets the widget source to pass to the listeners. Source defaults to
- * event.getSource() if this method is not used.
- *
- * @param source the source to provide as the listener's source
- */
- public void setSource(Widget source) {
- this.source = source;
- }
-
- /**
* Gets the listener being wrapped.
*
* @return the wrapped listener
@@ -225,19 +162,4 @@
protected T getListener() {
return listener;
}
-
- /**
- * Gets the widget source to pass to the listeners. Source defaults to
- * event.getSource() if not specified by {@link #setSource(Widget)}.
- *
- * @param event the event
- * @return source the source to provide as the listener's source
- */
- protected Widget getSource(GwtEvent<?> event) {
- if (source == null) {
- return (Widget) event.getSource();
- } else {
- return source;
- }
- }
}
diff --git a/user/src/com/google/gwt/user/client/DOM.java b/user/src/com/google/gwt/user/client/DOM.java
index 80be485..807cd90 100644
--- a/user/src/com/google/gwt/user/client/DOM.java
+++ b/user/src/com/google/gwt/user/client/DOM.java
@@ -20,6 +20,7 @@
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.impl.DOMImpl;
import com.google.gwt.user.client.ui.PotentialElement;
@@ -30,6 +31,33 @@
* {@link com.google.gwt.user.client.Event events}.
*/
public class DOM {
+
+ private static class NativePreview extends BaseListenerWrapper<EventPreview>
+ implements Event.NativePreviewHandler {
+ @Deprecated
+ public static void add(EventPreview listener) {
+ Event.addNativePreviewHandler(new NativePreview(listener));
+ }
+
+ public static void remove(EventPreview listener) {
+ baseRemove(Event.handlers, listener, NativePreviewEvent.getType());
+ }
+
+ private NativePreview(EventPreview listener) {
+ super(listener);
+ }
+
+ public void onPreviewNativeEvent(NativePreviewEvent event) {
+ // The legacy EventHandler should only fire if it is on the top of the
+ // stack (ie. the last one added).
+ if (event.isFirstHandler()) {
+ if (!listener.onEventPreview(Event.as(event.getNativeEvent()))) {
+ event.cancel();
+ }
+ }
+ }
+ }
+
// The current event being fired
private static Event currentEvent = null;
static final DOMImpl impl = GWT.create(DOMImpl.class);
@@ -48,7 +76,7 @@
*/
@Deprecated
public static void addEventPreview(EventPreview preview) {
- BaseListenerWrapper.NativePreview.add(preview);
+ NativePreview.add(preview);
}
/**
@@ -1044,7 +1072,7 @@
*/
@Deprecated
public static void removeEventPreview(EventPreview preview) {
- BaseListenerWrapper.NativePreview.remove(preview);
+ NativePreview.remove(preview);
}
/**
diff --git a/user/src/com/google/gwt/user/client/History.java b/user/src/com/google/gwt/user/client/History.java
index c8f9030..285ffee 100644
--- a/user/src/com/google/gwt/user/client/History.java
+++ b/user/src/com/google/gwt/user/client/History.java
@@ -18,7 +18,9 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.impl.Disposable;
import com.google.gwt.core.client.impl.Impl;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.impl.HistoryImpl;
@@ -58,6 +60,26 @@
*/
public class History {
+ private static class WrapHistory extends BaseListenerWrapper<HistoryListener>
+ implements ValueChangeHandler<String> {
+ @Deprecated
+ public static void add(HistoryListener listener) {
+ addValueChangeHandler(new WrapHistory(listener));
+ }
+
+ public static void remove(HandlerManager manager, HistoryListener listener) {
+ baseRemove(manager, listener, ValueChangeEvent.getType());
+ }
+
+ private WrapHistory(HistoryListener listener) {
+ super(listener);
+ }
+
+ public void onValueChange(ValueChangeEvent<String> event) {
+ listener.onHistoryChanged(event.getValue());
+ }
+ }
+
private static HistoryImpl impl;
static {
@@ -91,7 +113,7 @@
@Deprecated
public static void addHistoryListener(HistoryListener listener) {
if (impl != null) {
- BaseListenerWrapper.WrapHistory.add(listener);
+ WrapHistory.add(listener);
}
}
@@ -215,7 +237,7 @@
@Deprecated
public static void removeHistoryListener(HistoryListener listener) {
if (impl != null) {
- BaseListenerWrapper.WrapHistory.remove(impl.getHandlers(), listener);
+ WrapHistory.remove(impl.getHandlers(), listener);
}
}
}
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 9b4a1b4..732b1d7 100644
--- a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
@@ -77,6 +77,7 @@
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
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.GwtEvent.Type;
import com.google.gwt.user.client.BaseListenerWrapper;
@@ -91,7 +92,7 @@
*
*
* @param <T> listener type
- * @deprecated will be removed in GWT 2.0 with the handler listeners themselves
+ * @deprecated will be removed in GWT 2.7 with the handler listeners themselves
*/
@Deprecated
public abstract class ListenerWrapper<T> extends BaseListenerWrapper<T> {
@@ -811,8 +812,34 @@
}
}
+ private Widget source;
+
protected ListenerWrapper(T listener) {
super(listener);
}
+ /**
+ * Sets the widget source to pass to the listeners. Source defaults to
+ * event.getSource() if this method is not used.
+ *
+ * @param source the source to provide as the listener's source
+ */
+ public void setSource(Widget source) {
+ this.source = source;
+ }
+
+ /**
+ * Gets the widget source to pass to the listeners. Source defaults to
+ * event.getSource() if not specified by {@link #setSource(Widget)}.
+ *
+ * @param event the event
+ * @return source the source to provide as the listener's source
+ */
+ protected Widget getSource(GwtEvent<?> event) {
+ if (source == null) {
+ return (Widget) event.getSource();
+ } else {
+ return source;
+ }
+ }
}