docs: private List<Element> childElementsList() {
          List<Element> children;
          if (shadowChildrenRef == null || (children = shadowChildrenRef.get()) == null) {
              final int size = childNodes.size();
              children = new ArrayList<>(size);
              //noinspection ForLoopReplaceableByForEach (beacause it allocates an Iterator which is wasteful here)
              for (int i = 0; i < size; i++) {
                  final Node node = childNodes.get(i);
                  if (node instanceof Element)
                      children.add((Element) node);
              }
              shadowChildrenRef = new WeakReference<>(children);
          }
          return children;
      }