public List<? extends DomElement> getCollectionChildren(final AbstractCollectionChildDescription description, boolean processIncludes) {
    if (myStub != null && description.isStubbed()) {
      if (description instanceof DomChildDescriptionImpl) {
        XmlName xmlName = ((DomChildDescriptionImpl)description).getXmlName();
        SmartList<DomElement> result = new SmartList<>();
        List<? extends Stub> stubs = myStub.getChildrenStubs();
        for (Stub stub : stubs) {
          if (stub instanceof DomStub && ((DomStub)stub).matches(xmlName)) {
            result.add(((DomStub)stub).getOrCreateHandler((DomChildDescriptionImpl)description, myManager).getProxy());
          }
          else if (processIncludes && stub instanceof XIncludeStub) {
            ((XIncludeStub)stub).resolve(this, result, xmlName);
          }
        }
        return result;
      }
      else if (description instanceof CustomDomChildrenDescriptionImpl) {
        List<? extends Stub> stubs = myStub.getChildrenStubs();
        return ContainerUtil.mapNotNull(stubs, (NullableFunction<Stub, DomElement>)stub -> {
          if (stub instanceof ElementStub && ((ElementStub)stub).isCustom()) {
            EvaluatedXmlName name = new DummyEvaluatedXmlName(((ElementStub)stub).getName(), "");
            return new CollectionElementInvocationHandler(name, (CustomDomChildrenDescriptionImpl)description, myManager, (ElementStub)stub).getProxy();
          }
          return null;
        });
      }
    }
    XmlTag tag = getXmlTag();
    if (tag == null) return Collections.emptyList();

    final List<XmlTag> subTags = getCollectionSubTags(description, tag, processIncludes);
    if (subTags.isEmpty()) return Collections.emptyList();

    List<DomElement> elements = new ArrayList<>(subTags.size());
    for (XmlTag subTag : subTags) {
      DomInvocationHandler handler = myManager.getDomHandler(subTag);
      if (handler == null) {
        String msg = "No child for subTag '" + subTag.getName() + "' in tag '" + tag.getName() + "'; subtag count=" + subTags.size() + ", description=" + description + ", subtag.class=" + subTag.getClass().getName();
        DomInvocationHandler anyDom = myManager.getDomHandler(subTag);
        if (anyDom != null) {
          msg += "\n sub-dom=" + anyDom + " with " + anyDom.getChildDescription();
        }
        throw new AssertionError(msg);
      }
      else {
        elements.add(handler.getProxy());
      }
    }
    return Collections.unmodifiableList(elements);
  }
public List<? extends DomElement> getCollectionChildren(final AbstractCollectionChildDescription description, boolean processIncludes)