Revert "Extracts AbstractComposite<W> out of Composite, to allow type safe"
Various mocked out tests broken.
This reverts r10290
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10292 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
index 81ac60a..69fac21 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/DesktopTaskListView.java
@@ -22,7 +22,7 @@
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.TextColumn;
-import com.google.gwt.user.client.ui.RequiresResizeComposite;
+import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.view.client.NoSelectionModel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
@@ -33,7 +33,7 @@
/**
* View used to display the list of Tasks.
*/
-public class DesktopTaskListView extends RequiresResizeComposite<DataGrid<?>> implements TaskListView {
+public class DesktopTaskListView extends ResizeComposite implements TaskListView {
/**
* Displays the list of tasks.
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/MobileWebAppShellDesktop.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/MobileWebAppShellDesktop.java
index f8e8842..117dfec 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/MobileWebAppShellDesktop.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/desktop/MobileWebAppShellDesktop.java
@@ -49,7 +49,7 @@
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
-import com.google.gwt.user.client.ui.RequiresResizeComposite;
+import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
@@ -63,7 +63,7 @@
/**
* Desktop version of the UI shell.
*/
-public class MobileWebAppShellDesktop extends RequiresResizeComposite<DockLayoutPanel> implements MobileWebAppShell {
+public class MobileWebAppShellDesktop extends ResizeComposite implements MobileWebAppShell {
/**
* CSS override used for the main menu.
@@ -71,7 +71,7 @@
interface MainMenuStyle extends CellList.Style {
}
- interface MobileWebAppShellDesktopUiBinder extends UiBinder<DockLayoutPanel, MobileWebAppShellDesktop> {
+ interface MobileWebAppShellDesktopUiBinder extends UiBinder<Widget, MobileWebAppShellDesktop> {
}
/**
@@ -147,6 +147,7 @@
/**
* Construct a new {@link MobileWebAppShellDesktop}.
+ * @param clientFactory the {@link ClientFactory} of shared resources
*/
public MobileWebAppShellDesktop(EventBus bus, final PlaceController placeController,
TaskListView taskListView, TaskEditView taskEditView, TaskReadView taskReadView) {
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/mobile/MobileWebAppShellMobile.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/mobile/MobileWebAppShellMobile.java
index 41e11e0..1521ba6 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/mobile/MobileWebAppShellMobile.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/mobile/MobileWebAppShellMobile.java
@@ -36,15 +36,15 @@
import com.google.gwt.user.client.ui.DeckLayoutPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.LayoutPanel;
-import com.google.gwt.user.client.ui.RequiresResizeComposite;
+import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget;
/**
* Mobile version of the UI shell.
*/
-public class MobileWebAppShellMobile extends RequiresResizeComposite<LayoutPanel> implements MobileWebAppShell {
+public class MobileWebAppShellMobile extends ResizeComposite implements MobileWebAppShell {
- interface MobileWebAppShellMobileUiBinder extends UiBinder<LayoutPanel, MobileWebAppShellMobile> {
+ interface MobileWebAppShellMobileUiBinder extends UiBinder<Widget, MobileWebAppShellMobile> {
}
private static MobileWebAppShellMobileUiBinder uiBinder =
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/tablet/MobileWebAppShellTablet.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/tablet/MobileWebAppShellTablet.java
index 9ede378..e98b290 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/tablet/MobileWebAppShellTablet.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp/client/tablet/MobileWebAppShellTablet.java
@@ -34,7 +34,7 @@
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.RequiresResizeComposite;
+import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
@@ -43,9 +43,9 @@
*
* TODO(rjrjr): this thing needs a presenter. Not an activity. A presenter.
*/
-public class MobileWebAppShellTablet extends RequiresResizeComposite<DockLayoutPanel> implements MobileWebAppShell {
+public class MobileWebAppShellTablet extends ResizeComposite implements MobileWebAppShell {
- interface MobileWebAppShellTabletUiBinder extends UiBinder<DockLayoutPanel, MobileWebAppShellTablet> {
+ interface MobileWebAppShellTabletUiBinder extends UiBinder<Widget, MobileWebAppShellTablet> {
}
private static MobileWebAppShellTabletUiBinder uiBinder =
diff --git a/tools/api-checker/config/gwt23_24userApi.conf b/tools/api-checker/config/gwt23_24userApi.conf
index 741d26a..595e1e1 100644
--- a/tools/api-checker/config/gwt23_24userApi.conf
+++ b/tools/api-checker/config/gwt23_24userApi.conf
@@ -157,11 +157,3 @@
com.google.gwt.user.client.ui.Image::prefetch(Ljava/lang/String;) OVERLOADED_METHOD_CALL
com.google.gwt.user.client.ui.Image::setUrl(Ljava/lang/String;) OVERLOADED_METHOD_CALL
com.google.gwt.user.client.ui.Image::setUrlAndVisibleRect(Ljava/lang/String;IIII) OVERLOADED_METHOD_CALL
-
-# Change StackLayoutPanel and TabLayoutPanel to get new superclass
-com.google.gwt.user.client.ui.StackLayoutPanel::getWidget() OVERRIDABLE_METHOD_RETURN_TYPE_CHANGE from class com.google.gwt.user.client.ui.Widget to class com.google.gwt.user.client.ui.LayoutPanel
-com.google.gwt.user.client.ui.StackLayoutPanel::initWidget(Lcom/google/gwt/user/client/ui/Widget;) MISSING
-com.google.gwt.user.client.ui.StackLayoutPanel::setWidget(Lcom/google/gwt/user/client/ui/Widget;) MISSING
-com.google.gwt.user.client.ui.TabLayoutPanel::getWidget() OVERRIDABLE_METHOD_RETURN_TYPE_CHANGE from class com.google.gwt.user.client.ui.Widget to class com.google.gwt.user.client.ui.LayoutPanel
-com.google.gwt.user.client.ui.TabLayoutPanel::initWidget(Lcom/google/gwt/user/client/ui/Widget;) MISSING
-com.google.gwt.user.client.ui.TabLayoutPanel::setWidget(Lcom/google/gwt/user/client/ui/Widget;) MISSING
diff --git a/user/src/com/google/gwt/user/client/ui/AbstractComposite.java b/user/src/com/google/gwt/user/client/ui/AbstractComposite.java
deleted file mode 100644
index 2195ac4..0000000
--- a/user/src/com/google/gwt/user/client/ui/AbstractComposite.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user.client.ui;
-
-import com.google.gwt.event.logical.shared.AttachEvent;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-
-/**
- * A type of widget that can wrap another widget, hiding the wrapped widget's
- * methods. When added to a panel, a composite behaves exactly as if the widget
- * it wraps had been added.
- * <p>
- * The composite is useful for creating a single widget out of an aggregate of
- * multiple other widgets contained in a single panel.
- *
- * @see Composite
- *
- * @param <W> the type of IsWidget this composite wraps
- */
-public class AbstractComposite<W extends IsWidget> extends Widget {
-
- private W isWidget;
-
- @Override
- public boolean isAttached() {
- if (isWidget != null) {
- return isWidget.asWidget().isAttached();
- }
- return false;
- }
-
- @Override
- public void onBrowserEvent(Event event) {
- // Fire any handler added to the composite itself.
- super.onBrowserEvent(event);
-
- // Delegate events to the widget.
- getWidget().asWidget().onBrowserEvent(event);
- }
-
- /**
- * Provides subclasses access to the widget that defines this composite.
- *
- * @return the widget
- */
- protected W getWidget() {
- return isWidget;
- }
-
- /**
- * Sets the widget to be wrapped by the composite. The wrapped widget must be
- * set before calling any {@link Widget} methods on this object, or adding it
- * to a panel. This method may only be called once for a given composite.
- * <p>
- * The widget returned by the wrapped object's {@link IsWidget#asWidget()} method
- * must be stable. If it changes, the results are unpredictable.
- *
- * @param isWidget the widget to be wrapped
- */
- protected void initWidget(W isWidget) {
- // Validate. Make sure the widget is not being set twice.
- if (this.isWidget != null) {
- throw new IllegalStateException("initWidget() may only be called once.");
- }
-
- // TODO rjrjr: avoids breaking some mocked unit tests, should fix the tests instead
- Widget newChild = isWidget instanceof Widget ? (Widget) isWidget : isWidget.asWidget();
-
- // Detach the new child.
- newChild.removeFromParent();
-
- // Use the contained widget's element as the composite's element,
- // effectively merging them within the DOM.
- setElement(newChild.getElement());
-
- // Logical attach.
- this.isWidget = isWidget;
-
- // Adopt.
- newChild.setParent(this);
- }
-
- /**
- *
- */
- @Override
- protected void onAttach() {
- Widget asWidget = getWidget().asWidget();
-
- if (!isOrWasAttached()) {
- asWidget.sinkEvents(eventsToSink);
- eventsToSink = -1;
- }
-
- asWidget.onAttach();
-
- // Clobber the widget's call to setEventListener(), causing all events to
- // be routed to this composite, which will delegate back to the widget by
- // default (note: it's not necessary to clear this in onDetach(), because
- // the widget's onDetach will do so).
- DOM.setEventListener(getElement(), this);
-
- // Call onLoad() directly, because we're not calling super.onAttach().
- onLoad();
- AttachEvent.fire(this, true);
- }
-
- @Override
- protected void onDetach() {
- try {
- onUnload();
- AttachEvent.fire(this, false);
- } finally {
- // We don't want an exception in user code to keep us from calling the
- // super implementation (or event listeners won't get cleaned up and
- // the attached flag will be wrong).
- getWidget().asWidget().onDetach();
- }
- }
-}
\ No newline at end of file
diff --git a/user/src/com/google/gwt/user/client/ui/Composite.java b/user/src/com/google/gwt/user/client/ui/Composite.java
index 3fdf5fa..c90cc4e 100644
--- a/user/src/com/google/gwt/user/client/ui/Composite.java
+++ b/user/src/com/google/gwt/user/client/ui/Composite.java
@@ -15,25 +15,115 @@
*/
package com.google.gwt.user.client.ui;
+import com.google.gwt.event.logical.shared.AttachEvent;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+
/**
- * Simple extension of {@link AbstractComposite} that doesn't require type
- * parameters. This originally was the only implementation of Composite, before
- * {@link AbstractComposite} was introduced to allow strong typing and deferred
- * construction.
- *
+ * A type of widget that can wrap another widget, hiding the wrapped widget's
+ * methods. When added to a panel, a composite behaves exactly as if the widget
+ * it wraps had been added.
+ *
+ * <p>
+ * The composite is useful for creating a single widget out of an aggregate of
+ * multiple other widgets contained in a single panel.
+ * </p>
+ *
+ * <p>
* <h3>Example</h3>
* {@example com.google.gwt.examples.CompositeExample}
* </p>
*/
-public abstract class Composite extends AbstractComposite<Widget> {
-
+public abstract class Composite extends Widget {
+
+ private Widget widget;
+
+ @Override
+ public boolean isAttached() {
+ if (widget != null) {
+ return widget.isAttached();
+ }
+ return false;
+ }
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ // Fire any handler added to the composite itself.
+ super.onBrowserEvent(event);
+
+ // Delegate events to the widget.
+ widget.onBrowserEvent(event);
+ }
+
/**
- * Provided for compatibility with legacy unit tests that mocked
- * this specific method.
+ * Provides subclasses access to the topmost widget that defines this
+ * composite.
+ *
+ * @return the widget
*/
- @Deprecated
- protected void initWidget(Widget widget) {
- super.initWidget(widget);
+ protected Widget getWidget() {
+ return widget;
+ }
+
+ /**
+ * Sets the widget to be wrapped by the composite. The wrapped widget must be
+ * set before calling any {@link Widget} methods on this object, or adding it
+ * to a panel. This method may only be called once for a given composite.
+ *
+ * @param widget the widget to be wrapped
+ */
+ protected void initWidget(Widget widget) {
+ // Validate. Make sure the widget is not being set twice.
+ if (this.widget != null) {
+ throw new IllegalStateException("Composite.initWidget() may only be "
+ + "called once.");
+ }
+
+ // Detach the new child.
+ widget.removeFromParent();
+
+ // Use the contained widget's element as the composite's element,
+ // effectively merging them within the DOM.
+ setElement(widget.getElement());
+
+ // Logical attach.
+ this.widget = widget;
+
+ // Adopt.
+ widget.setParent(this);
+ }
+
+ @Override
+ protected void onAttach() {
+ if (!isOrWasAttached()) {
+ widget.sinkEvents(eventsToSink);
+ eventsToSink = -1;
+ }
+
+ widget.onAttach();
+
+ // Clobber the widget's call to setEventListener(), causing all events to
+ // be routed to this composite, which will delegate back to the widget by
+ // default (note: it's not necessary to clear this in onDetach(), because
+ // the widget's onDetach will do so).
+ DOM.setEventListener(getElement(), this);
+
+ // Call onLoad() directly, because we're not calling super.onAttach().
+ onLoad();
+ AttachEvent.fire(this, true);
+ }
+
+ @Override
+ protected void onDetach() {
+ try {
+ onUnload();
+ AttachEvent.fire(this, false);
+ } finally {
+ // We don't want an exception in user code to keep us from calling the
+ // super implementation (or event listeners won't get cleaned up and
+ // the attached flag will be wrong).
+ widget.onDetach();
+ }
}
/**
diff --git a/user/src/com/google/gwt/user/client/ui/RequiresResizeComposite.java b/user/src/com/google/gwt/user/client/ui/RequiresResizeComposite.java
deleted file mode 100644
index d1a1003..0000000
--- a/user/src/com/google/gwt/user/client/ui/RequiresResizeComposite.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.user.client.ui;
-
-/**
- * A {@link AbstractComposite} implementation that implements {@link RequiresResize}
- * and automatically delegates that interface's methods to its wrapped widget,
- * which must itself implement {@link RequiresResize}.
- *
- * @param <W> the type of widget wrapped
- */
-public abstract class RequiresResizeComposite<W extends Widget & RequiresResize> extends
- AbstractComposite<W> implements RequiresResize {
-
- public void onResize() {
- getWidget().onResize();
- }
-}
diff --git a/user/src/com/google/gwt/user/client/ui/ResizeComposite.java b/user/src/com/google/gwt/user/client/ui/ResizeComposite.java
index 1d2bc1d..7d0bab3 100644
--- a/user/src/com/google/gwt/user/client/ui/ResizeComposite.java
+++ b/user/src/com/google/gwt/user/client/ui/ResizeComposite.java
@@ -19,9 +19,7 @@
* A {@link Composite} implementation that implements {@link RequiresResize} and
* automatically delegates that interface's methods to its wrapped widget, which
* must itself implement {@link RequiresResize}.
- * @deprecated Use {@link RequiresResizeComposite}
*/
-@Deprecated
public abstract class ResizeComposite extends Composite implements
RequiresResize {
diff --git a/user/src/com/google/gwt/user/client/ui/StackLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/StackLayoutPanel.java
index f5fe823..e567de9 100644
--- a/user/src/com/google/gwt/user/client/ui/StackLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/StackLayoutPanel.java
@@ -95,7 +95,7 @@
* </g:StackLayoutPanel>
* </pre>
*/
-public class StackLayoutPanel extends RequiresResizeComposite<LayoutPanel> implements HasWidgets,
+public class StackLayoutPanel extends ResizeComposite implements HasWidgets,
ProvidesResize, IndexedPanel.ForIsWidget, AnimatedLayout,
HasBeforeSelectionHandlers<Integer>, HasSelectionHandlers<Integer> {
diff --git a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
index 365f8ee..0c90414 100644
--- a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
@@ -94,7 +94,7 @@
* </g:TabLayoutPanel>
* </pre>
*/
-public class TabLayoutPanel extends RequiresResizeComposite<LayoutPanel> implements HasWidgets,
+public class TabLayoutPanel extends ResizeComposite implements HasWidgets,
ProvidesResize, IndexedPanel.ForIsWidget, AnimatedLayout,
HasBeforeSelectionHandlers<Integer>, HasSelectionHandlers<Integer> {