JavaScriptObject identity now holds true for all hosted modes; deprecating DOM.compare() which is no longer necessary.
Suggested by: me
Review by: bruce, rdayal (desk check)
Review by: jgw, knorton (spiritual advisors)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2030 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/DOM.java b/user/src/com/google/gwt/user/client/DOM.java
index 28e724d..a1a3b2a 100644
--- a/user/src/com/google/gwt/user/client/DOM.java
+++ b/user/src/com/google/gwt/user/client/DOM.java
@@ -76,16 +76,16 @@
}
/**
- * Compares two elements for equality (note that reference equality is not
- * sufficient to determine equality among elements on most browsers).
+ * Compares two elements for equality. Note that this method is now deprecated
+ * because reference identity accurately reports equality.
*
* @param elem1 the first element to be compared
* @param elem2 the second element to be compared
* @return <code>true</code> if they are in fact the same element
- * @see #isOrHasChild(Element, Element)
+ * @deprecated Use identity comparison.
*/
public static boolean compare(Element elem1, Element elem2) {
- return impl.compare(elem1, elem2);
+ return elem1 == elem2;
}
/**
@@ -931,7 +931,7 @@
* @see #setCapture(Element)
*/
public static void releaseCapture(Element elem) {
- if ((sCaptureElem != null) && compare(elem, sCaptureElem)) {
+ if ((sCaptureElem != null) && elem == sCaptureElem) {
sCaptureElem = null;
}
impl.releaseCapture(elem);
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImpl.java b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
index 4e7bb0623..e0e8c75 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
@@ -34,8 +34,6 @@
return elem.cloneNode(deep);
}-*/;
- public abstract boolean compare(Element elem1, Element elem2);
-
public native Element createElement(String tag) /*-{
return $doc.createElement(tag);
}-*/;
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
index 5dd4ba9..dc95391 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
@@ -24,18 +24,13 @@
*/
class DOMImplIE6 extends DOMImpl {
+ /**
+ * Referenced from JavaScript.
+ */
+ @SuppressWarnings("unused")
private static Element currentEventTarget;
@Override
- public native boolean compare(Element elem1, Element elem2) /*-{
- if (!elem1 && !elem2)
- return true;
- else if (!elem1 || !elem2)
- return false;
- return (elem1.uniqueID == elem2.uniqueID);
- }-*/;
-
- @Override
public native Element createInputRadioElement(String name) /*-{
return $doc.createElement("<INPUT type='RADIO' name='" + name + "'>");
}-*/;
@@ -130,8 +125,9 @@
public native int getChildIndex(Element parent, Element child) /*-{
var count = parent.children.length;
for (var i = 0; i < count; ++i) {
- if (child.uniqueID == parent.children[i].uniqueID)
+ if (child === parent.children[i]) {
return i;
+ }
}
return -1;
}-*/;
@@ -246,7 +242,7 @@
public native boolean isOrHasChild(Element parent, Element child) /*-{
// An extra equality check is required due to the fact that
// elem.contains(elem) is false if elem is not attached to the DOM.
- return (parent.uniqueID == child.uniqueID) || parent.contains(child);
+ return (parent === child) || parent.contains(child);
}-*/;
@Override
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplMozilla.java b/user/src/com/google/gwt/user/client/impl/DOMImplMozilla.java
index 1c2b824..5b9c8d3 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplMozilla.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplMozilla.java
@@ -19,24 +19,11 @@
import com.google.gwt.user.client.Event;
/**
- * Mozilla implementation of StandardBrowser. The main difference between
- * Mozilla and others is that element comparison must be done using isSameNode()
- * (== comparison doesn't always give you the right answer, probably because of
- * its JavaScript wrappers for xpcom dom nodes).
+ * Mozilla implementation of StandardBrowser.
*/
class DOMImplMozilla extends DOMImplStandard {
@Override
- public native boolean compare(Element elem1, Element elem2) /*-{
- if (!elem1 && !elem2) {
- return true;
- } else if (!elem1 || !elem2) {
- return false;
- }
- return (elem1.isSameNode(elem2));
- }-*/;
-
- @Override
public native int eventGetMouseWheelVelocityY(Event evt) /*-{
return evt.detail || -1;
}-*/;
@@ -88,34 +75,13 @@
}-*/;
@Override
- public native int getChildIndex(Element parent, Element toFind) /*-{
- var count = 0, child = parent.firstChild;
- while (child) {
- if (child.isSameNode(toFind)) {
- return count;
- }
- if (child.nodeType == 1) {
- ++count;
- }
- child = child.nextSibling;
- }
- return -1;
- }-*/;
-
- @Override
public native boolean isOrHasChild(Element parent, Element child) /*-{
// For more information about compareDocumentPosition, see:
// http://www.quirksmode.org/blog/archives/2006/01/contains_for_mo.html
- return parent.isSameNode(child) || !!(parent.compareDocumentPosition(child) & 16);
+ return (parent === child) || !!(parent.compareDocumentPosition(child) & 16);
}-*/;
@Override
- public void releaseCapture(Element elem) {
- maybeInitializeEventSystem();
- releaseCaptureImpl(elem);
- }
-
- @Override
public void sinkEvents(Element elem, int bits) {
super.sinkEvents(elem, bits);
sinkEventsMozilla(elem, bits);
@@ -171,10 +137,4 @@
$wnd.addEventListener('DOMMouseScroll', $wnd.__dispatchCapturedMouseEvent,
true);
}-*/;
-
- private native void releaseCaptureImpl(Element elem) /*-{
- if (elem.isSameNode($wnd.__captureElem)) {
- $wnd.__captureElem = null;
- }
- }-*/;
}
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
index 66ca744..82812a3 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
@@ -26,11 +26,6 @@
abstract class DOMImplStandard extends DOMImpl {
@Override
- public native boolean compare(Element elem1, Element elem2) /*-{
- return (elem1 == elem2);
- }-*/;
-
- @Override
public native Element createInputRadioElement(String name) /*-{
var elem = $doc.createElement("INPUT");
elem.type = 'radio';
@@ -115,13 +110,14 @@
public native int getChildIndex(Element parent, Element toFind) /*-{
var count = 0, child = parent.firstChild;
while (child) {
- if (child == toFind)
+ if (child === toFind) {
return count;
- if (child.nodeType == 1)
+ }
+ if (child.nodeType == 1) {
++count;
+ }
child = child.nextSibling;
}
-
return -1;
}-*/;
@@ -245,8 +241,9 @@
}-*/;
private native void releaseCaptureImpl(Element elem) /*-{
- if (elem == $wnd.__captureElem)
+ if (elem === $wnd.__captureElem) {
$wnd.__captureElem = null;
+ }
}-*/;
private native void setCaptureImpl(Element elem) /*-{
diff --git a/user/src/com/google/gwt/user/client/impl/ImageSrcIE6.java b/user/src/com/google/gwt/user/client/impl/ImageSrcIE6.java
index 2d077c8..d4d0d95 100644
--- a/user/src/com/google/gwt/user/client/impl/ImageSrcIE6.java
+++ b/user/src/com/google/gwt/user/client/impl/ImageSrcIE6.java
@@ -184,10 +184,9 @@
* Removes a child image from its pending parent.
*/
private static native void removeChild(Element parent, Element child) /*-{
- var uniqueID = child.uniqueID;
var kids = parent.__kids;
for (var i = 0, c = kids.length; i < c; ++i) {
- if (kids[i].uniqueID == uniqueID) {
+ if (kids[i] === child) {
kids.splice(i, 1);
child.__pendingSrc = null;
return;
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index bbaac5d..103180d 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -1207,12 +1207,12 @@
// it.
Element tr = DOM.getParent(td);
Element body = DOM.getParent(tr);
- if (DOM.compare(body, bodyElem)) {
+ if (body == bodyElem) {
return td;
}
}
// If we run into this table's body, we're out of options.
- if (DOM.compare(td, bodyElem)) {
+ if (td == bodyElem) {
return null;
}
}
diff --git a/user/src/com/google/gwt/user/client/ui/StackPanel.java b/user/src/com/google/gwt/user/client/ui/StackPanel.java
index f6ae64d..9922032 100644
--- a/user/src/com/google/gwt/user/client/ui/StackPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/StackPanel.java
@@ -248,7 +248,7 @@
}
private int findDividerIndex(Element elem) {
- while ((elem != null) && !DOM.compare(elem, getElement())) {
+ while (elem != getElement()) {
String expando = DOM.getElementProperty(elem, "__index");
if (expando != null) {
// Make sure it belongs to me!
diff --git a/user/src/com/google/gwt/user/client/ui/Tree.java b/user/src/com/google/gwt/user/client/ui/Tree.java
index af09ab5..f034004 100644
--- a/user/src/com/google/gwt/user/client/ui/Tree.java
+++ b/user/src/com/google/gwt/user/client/ui/Tree.java
@@ -364,7 +364,7 @@
// Currently, the way we're using image bundles causes extraneous events
// to be sunk on individual items' open/close images. This leads to an
// extra event reaching the Tree, which we will ignore here.
- if (DOM.compare(DOM.eventGetCurrentTarget(event), getElement())) {
+ if (DOM.eventGetCurrentTarget(event) == getElement()) {
elementClicked(root, DOM.eventGetTarget(event));
}
break;
@@ -711,7 +711,7 @@
* Collects parents going up the element tree, terminated at the tree root.
*/
private void collectElementChain(ArrayList<Element> chain, Element hRoot, Element hElem) {
- if ((hElem == null) || DOM.compare(hElem, hRoot)) {
+ if ((hElem == null) || (hElem == hRoot)) {
return;
}
@@ -752,7 +752,7 @@
Element hCurElem = chain.get(idx);
for (int i = 0, n = root.getChildCount(); i < n; ++i) {
TreeItem child = root.getChild(i);
- if (DOM.compare(child.getElement(), hCurElem)) {
+ if (child.getElement() == hCurElem) {
TreeItem retItem = findItemByChain(chain, idx + 1, root.getChild(i));
if (retItem == null) {
return child;
diff --git a/user/src/com/google/gwt/user/client/ui/impl/TextBoxImplIE6.java b/user/src/com/google/gwt/user/client/ui/impl/TextBoxImplIE6.java
index 9bc5933..3a3a52c 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/TextBoxImplIE6.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/TextBoxImplIE6.java
@@ -27,7 +27,7 @@
public native int getCursorPos(Element elem) /*-{
try {
var tr = elem.document.selection.createRange();
- if (tr.parentElement().uniqueID != elem.uniqueID)
+ if (tr.parentElement() !== elem)
return -1;
return -tr.move("character", -65535);
}
@@ -40,7 +40,7 @@
public native int getSelectionLength(Element elem) /*-{
try {
var tr = elem.document.selection.createRange();
- if (tr.parentElement().uniqueID != elem.uniqueID)
+ if (tr.parentElement() !== elem)
return 0;
return tr.text.length;
}
diff --git a/user/src/com/google/gwt/xml/client/impl/DOMItem.java b/user/src/com/google/gwt/xml/client/impl/DOMItem.java
index 98ff3ea..df16f26 100644
--- a/user/src/com/google/gwt/xml/client/impl/DOMItem.java
+++ b/user/src/com/google/gwt/xml/client/impl/DOMItem.java
@@ -16,7 +16,6 @@
package com.google.gwt.xml.client.impl;
import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.user.client.DOM;
/**
* This class is the base class for all DOM object wrappers.
@@ -38,14 +37,8 @@
*/
@Override
public boolean equals(final Object o) {
- /*
- * This method uses the DOM equals method because it happens to work
- * perfectly for all the browsers we support, and that method is different
- * for each browser.
- */
if (o instanceof DOMItem) {
- return DOM.compare(castToElement(this.getJsObject()),
- castToElement(((DOMItem) o).getJsObject()));
+ return this.getJsObject() == ((DOMItem) o).getJsObject();
}
return false;
}
@@ -53,9 +46,4 @@
JavaScriptObject getJsObject() {
return jsObject;
}
-
- private native com.google.gwt.user.client.Element castToElement(
- JavaScriptObject toBeCast) /*-{
- return toBeCast;
- }-*/;
}
diff --git a/user/test/com/google/gwt/user/client/ui/DOMTest.java b/user/test/com/google/gwt/user/client/ui/DOMTest.java
index 53dda7f..c58977f 100644
--- a/user/test/com/google/gwt/user/client/ui/DOMTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DOMTest.java
@@ -157,7 +157,7 @@
DOM.insertChild(parent, div, Integer.MAX_VALUE);
Element child = DOM.getChild(RootPanel.get().getElement(),
DOM.getChildCount(parent) - 1);
- assertTrue(DOM.compare(div, child));
+ assertTrue(div == child);
}
/**
diff --git a/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java b/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
index c192ebc..f0c478c 100644
--- a/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
@@ -66,8 +66,7 @@
}
// Check the container element
- assertTrue(DOM.compare(DOM.getFirstChild(panel.getCellElement(2, 1)),
- panel.getContainerElement()));
+ assertTrue(DOM.getFirstChild(panel.getCellElement(2, 1)) == panel.getContainerElement());
}
/**
@@ -87,7 +86,6 @@
}
// Check the container element
- assertTrue(DOM.compare(DOM.getFirstChild(panel.getCellElement(1, 1)),
- panel.getContainerElement()));
+ assertTrue(DOM.getFirstChild(panel.getCellElement(1, 1)) == panel.getContainerElement());
}
}
diff --git a/user/test/com/google/gwt/user/client/ui/DockPanelTest.java b/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
index 19e8fcd..543d714 100644
--- a/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
@@ -43,7 +43,7 @@
Element curElem = getElement();
Element body = RootPanel.getBodyElement();
while (curElem != null) {
- if (DOM.compare(curElem, body)) {
+ if (curElem == body) {
attachedWhenLoaded = true;
}
curElem = DOM.getParent(curElem);
diff --git a/user/test/com/google/gwt/user/client/ui/PopupTest.java b/user/test/com/google/gwt/user/client/ui/PopupTest.java
index 6b4f122..675ef31 100644
--- a/user/test/com/google/gwt/user/client/ui/PopupTest.java
+++ b/user/test/com/google/gwt/user/client/ui/PopupTest.java
@@ -90,7 +90,6 @@
TestablePopupPanel p2 = new TestablePopupPanel();
assertTrue(p1.getContainerElement() != null);
assertTrue(p2.getContainerElement() != null);
- assertFalse(
- DOM.compare(p1.getContainerElement(), p2.getContainerElement()));
+ assertFalse(p1.getContainerElement() == p2.getContainerElement());
}
}