From 646f7d9f0a940fe23a9b0c986720536214e18e17 Mon Sep 17 00:00:00 2001 From: Manolo Carrasco Date: Sat, 29 May 2010 07:32:55 +0000 Subject: [PATCH] use the same "unique()" method in SelectorEngine and GQuery, this eliminates the need of FastSet in favor of java.util.HashSet --- .../com/google/gwt/query/client/GQuery.java | 52 ++----------------- .../query/client/impl/SelectorEngineImpl.java | 17 ++++++ .../client/impl/SelectorEngineSizzle.java | 14 ----- .../gwt/query/client/GQueryCoreTest.java | 16 ++++++ .../gwt/query/client/GQuerySelectorsTest.java | 18 +++++++ 5 files changed, 56 insertions(+), 61 deletions(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java index fa339dbd..c310065a 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java @@ -20,8 +20,8 @@ import static com.google.gwt.query.client.Events.Events; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayString; -import com.google.gwt.dom.client.BodyElement; import com.google.gwt.dom.client.ButtonElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -39,6 +39,7 @@ import com.google.gwt.query.client.css.Percentage; import com.google.gwt.query.client.css.TakesLength; import com.google.gwt.query.client.css.TakesPercentage; import com.google.gwt.query.client.impl.DocumentStyleImpl; +import com.google.gwt.query.client.impl.SelectorEngineImpl; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Window; @@ -135,41 +136,7 @@ public class GQuery implements Lazy { }-*/; } - private static final class FastSet extends JavaScriptObject { - - public static FastSet create() { - return JavaScriptObject.createObject().cast(); - } - - protected FastSet() { - } - - public void add(Object o) { - add0(o.hashCode()); - } - - public boolean contains(Object o) { - return contains0(o.hashCode()); - } - - public void remove(Object o) { - remove0(o.hashCode()); - } - - private native void add0(int hc) /*-{ - this[hc]=true; - }-*/; - - private native boolean contains0(int hc) /*-{ - return this[hc] || false; - }-*/; - - private native void remove0(int hc) /*-{ - delete this[hc]; - }-*/; - } - - private static final class Queue extends JavaScriptObject { + public static final class Queue extends JavaScriptObject { public static Queue newInstance() { return createArray().cast(); @@ -2029,16 +1996,7 @@ public class GQuery implements Lazy { * only works on arrays of DOM elements, not strings or numbers. */ public JSArray unique(JSArray result) { - FastSet f = FastSet.create(); - JSArray ret = JSArray.create(); - for (int i = 0; i < result.getLength(); i++) { - Element e = result.getElement(i); - if (!f.contains(e)) { - f.add(e); - ret.addNode(e); - } - } - return ret; + return SelectorEngineImpl.unique(result.>cast()).cast(); } /** @@ -2396,7 +2354,7 @@ public class GQuery implements Lazy { return n.getChildNodes().cast(); } - private Object data(Element item, String name, S value) { + protected Object data(Element item, String name, S value) { if (dataCache == null) { windowData = JavaScriptObject.createObject().cast(); dataCache = JavaScriptObject.createObject().cast(); diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineImpl.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineImpl.java index 49ca99ce..4e5a1a71 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineImpl.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineImpl.java @@ -15,6 +15,10 @@ */ package com.google.gwt.query.client.impl; +import java.util.HashSet; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Node; import com.google.gwt.dom.client.NodeList; @@ -131,4 +135,17 @@ public abstract class SelectorEngineImpl { * @return a list of matched nodes */ public abstract NodeList select(String selector, Node ctx); + + public static JsArray unique(JsArray a) { + JsArray ret = JavaScriptObject.createArray().cast(); + HashSet f = new HashSet(); + for (int i = 0; i < a.length(); i++) { + Element e = a.get(i); + if (!f.contains(e.hashCode())) { + f.add(e.hashCode()); + ret.push(e); + } + } + return ret; + } } diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineSizzle.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineSizzle.java index 3149f3be..57af8277 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineSizzle.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineSizzle.java @@ -15,7 +15,6 @@ */ package com.google.gwt.query.client.impl; -import java.util.HashSet; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; @@ -630,19 +629,6 @@ public class SelectorEngineSizzle extends SelectorEngineImpl { return @com.google.gwt.query.client.impl.SelectorEngineSizzle::filter(Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;ZLjava/lang/Object;)( later, tmpSet, false ); }-*/; - public static JsArray unique(JsArray a) { - JsArray ret = JavaScriptObject.createArray().cast(); - HashSet f = new HashSet(); - for (int i = 0; i < a.length(); i++) { - Element e = a.get(i); - if (!f.contains(e.hashCode())) { - f.add(e.hashCode()); - ret.push(e); - } - } - return ret; - } - private static native JsArray select(String selector, Node context, JsArray results, JsArray seed) /*-{ results = results || []; var origContext = context = context || document; diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java index 4e275a85..82ec7694 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java @@ -20,6 +20,8 @@ import static com.google.gwt.query.client.GQuery.$$; import com.google.gwt.dom.client.Element; import com.google.gwt.junit.client.GWTTestCase; +import com.google.gwt.query.client.impl.SelectorEngineImpl; +import com.google.gwt.query.client.impl.SelectorEngineSizzle; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RootPanel; @@ -556,6 +558,20 @@ public class GQueryCoreTest extends GWTTestCase { assertEquals(2, $("p", e).slice(0, -1).size()); assertEquals(0, $("p", e).slice(3, 2).size()); } + + public void testUnique() { + SelectorEngineImpl selSizz = new SelectorEngineSizzle(); + GQuery g = $(e).html("

"); + JSArray a; + a = selSizz.select("p", e).cast(); + assertEquals(3, a.getLength()); + a.addNode(a.getNode(0)); + a.addNode(a.getNode(3)); + assertEquals(5 , a.getLength()); + a = g.unique(a); + assertEquals(3, a.getLength()); + } + public void testWrapMethod() { String content = "

Test Paragraph.

"; String wrapper = "
Content
"; diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTest.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTest.java index 17182d0c..057679e5 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTest.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTest.java @@ -18,6 +18,7 @@ package com.google.gwt.query.client; import static com.google.gwt.query.client.GQuery.$; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Node; @@ -269,6 +270,23 @@ public class GQuerySelectorsTest extends GWTTestCase { assertEquals("branchB target", selectors.target().text()); } + public void testUnique() { + SelectorEngineImpl selSizz = new SelectorEngineSizzle(); + $(e).html(getTestContent()); + + JsArray a; + a = selSizz.select("p", e).cast(); + int n = a.length(); + assertTrue(n > 300); + for (int i=0; i