From: <rb...@us...> - 2015-11-16 18:00:24
|
Revision: 11548 http://sourceforge.net/p/htmlunit/code/11548 Author: rbri Date: 2015-11-16 18:00:22 +0000 (Mon, 16 Nov 2015) Log Message: ----------- remove dependency to commons collection Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2015-11-16 17:48:09 UTC (rev 11547) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2015-11-16 18:00:22 UTC (rev 11548) @@ -48,8 +48,6 @@ import java.util.WeakHashMap; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.Predicate; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -1439,7 +1437,6 @@ } private Object getElementsByName(final HtmlPage page, final String name) { - Object result = NOT_FOUND; // May be attempting to retrieve element(s) by name. IMPORTANT: We're using map-backed operations // like getHtmlElementsByName() and getHtmlElementById() as much as possible, so as to avoid XPath @@ -1449,56 +1446,48 @@ final List<DomElement> elements = page.getElementsByName(name); final boolean includeFormFields = getBrowserVersion().hasFeature(JS_WINDOW_FORMFIELDS_ACCESSIBLE_BY_NAME); - final Predicate filter = new Predicate() { - @Override - public boolean evaluate(final Object object) { - if (object instanceof HtmlEmbed - || object instanceof HtmlForm - || object instanceof HtmlImage - || object instanceof HtmlObject) { - return true; - } - if (includeFormFields && ( - object instanceof HtmlAnchor - || object instanceof HtmlButton - || object instanceof HtmlInput - || object instanceof HtmlMap - || object instanceof HtmlSelect - || object instanceof HtmlTextArea)) { - return true; - } - return false; + final Filter filter = new Filter(includeFormFields); + + final Iterator<DomElement> it = elements.iterator(); + while (it.hasNext()) { + if (!filter.matches(it.next())) { + it.remove(); } - }; - CollectionUtils.filter(elements, filter); + } + if (elements.size() == 0) { + return NOT_FOUND; + } + if (elements.size() == 1) { - result = getScriptableFor(elements.get(0)); + return getScriptableFor(elements.get(0)); } - else if (elements.size() > 1) { - // Null must be changed to '' for proper collection initialization. - final String expElementName = "null".equals(name) ? "" : name; - result = new HTMLCollection(page, true, "Window.getElementsByName('" + name + "')") { - @Override - protected List<Object> computeElements() { - final List<DomElement> elements = page.getElementsByName(expElementName); - CollectionUtils.filter(elements, filter); + // Null must be changed to '' for proper collection initialization. + final String expElementName = "null".equals(name) ? "" : name; - return new ArrayList<Object>(elements); - } + return new HTMLCollection(page, true, "Window.getElementsByName('" + name + "')") { + @Override + protected List<Object> computeElements() { + final List<DomElement> elements = page.getElementsByName(expElementName); + final List<Object> result = new ArrayList<Object>(elements.size()); - @Override - protected EffectOnCache getEffectOnCache(final HtmlAttributeChangeEvent event) { - if ("name".equals(event.getName())) { - return EffectOnCache.RESET; + for (DomElement domElement : elements) { + if (filter.matches(domElement)) { + result.add(domElement); } - return EffectOnCache.NONE; } - }; - } + return result; + } - return result; + @Override + protected EffectOnCache getEffectOnCache(final HtmlAttributeChangeEvent event) { + if ("name".equals(event.getName())) { + return EffectOnCache.RESET; + } + return EffectOnCache.NONE; + } + }; } /** @@ -1862,6 +1851,33 @@ "height", "width")); + private static final class Filter { + private final boolean includeFormFields_; + + private Filter(final boolean includeFormFields) { + includeFormFields_ = includeFormFields; + } + + private boolean matches(final Object object) { + if (object instanceof HtmlEmbed + || object instanceof HtmlForm + || object instanceof HtmlImage + || object instanceof HtmlObject) { + return true; + } + if (includeFormFields_ && ( + object instanceof HtmlAnchor + || object instanceof HtmlButton + || object instanceof HtmlInput + || object instanceof HtmlMap + || object instanceof HtmlSelect + || object instanceof HtmlTextArea)) { + return true; + } + return false; + } + } + /** * <p>Listens for changes anywhere in the document and evicts cached computed styles whenever something relevant * changes. Note that the very lazy way of doing this (completely clearing the cache every time something happens) |