diff --git a/src/main/java/org/htmlunit/html/AbstractDomNodeList.java b/src/main/java/org/htmlunit/html/AbstractDomNodeList.java
index 9cdedae151..fffbe43fc8 100644
--- a/src/main/java/org/htmlunit/html/AbstractDomNodeList.java
+++ b/src/main/java/org/htmlunit/html/AbstractDomNodeList.java
@@ -17,7 +17,7 @@
import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.util.AbstractList;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.w3c.dom.Node;
@@ -35,7 +35,7 @@ public abstract class AbstractDomNodeList extends AbstractLis
implements DomNodeList, Serializable {
/** This node list's root node. */
- private DomNode node_;
+ private final DomNode node_;
/** Element cache, used to avoid XPath expression evaluation as much as possible. */
private List cachedElements_;
@@ -47,14 +47,18 @@ public abstract class AbstractDomNodeList extends AbstractLis
*/
public AbstractDomNodeList(final DomNode node) {
super();
- if (node != null) {
- node_ = node;
- final DomHtmlAttributeChangeListenerImpl listener = new DomHtmlAttributeChangeListenerImpl(this);
- node_.addDomChangeListener(listener);
- if (node_ instanceof HtmlElement) {
- ((HtmlElement) node_).addHtmlAttributeChangeListener(listener);
- cachedElements_ = null;
- }
+ if (node == null) {
+ node_ = null;
+ cachedElements_ = Collections.EMPTY_LIST;
+ return;
+ }
+
+ node_ = node;
+ final DomHtmlAttributeChangeListenerImpl listener = new DomHtmlAttributeChangeListenerImpl(this);
+ node_.addDomChangeListener(listener);
+ if (node_ instanceof HtmlElement) {
+ ((HtmlElement) node_).addHtmlAttributeChangeListener(listener);
+ cachedElements_ = null;
}
}
@@ -78,12 +82,7 @@ protected DomNode getDomNode() {
*/
private List getNodes() {
if (cachedElements_ == null) {
- if (node_ == null) {
- cachedElements_ = new ArrayList<>();
- }
- else {
- cachedElements_ = provideElements();
- }
+ cachedElements_ = provideElements();
}
return cachedElements_;
}
@@ -177,7 +176,7 @@ public void attributeReplaced(final HtmlAttributeChangeEvent event) {
private void clearCache() {
if (nodeList_ != null) {
final AbstractDomNodeList> nodes = nodeList_.get();
- if (nodes != null) {
+ if (nodes != null && nodes.node_ != null) {
nodes.cachedElements_ = null;
}
}