final @NotNull DomInvocationHandler getFixedChild(final Pair<? extends FixedChildDescriptionImpl, Integer> info) {
    final FixedChildDescriptionImpl description = info.first;
    XmlName xmlName = description.getXmlName();
    final EvaluatedXmlName evaluatedXmlName = createEvaluatedXmlName(xmlName);
    if (myStub != null && description.isStubbed()) {
      List<DomStub> stubs = myStub.getChildrenByName(xmlName);
      DomStub stub = stubs.isEmpty() ? null : stubs.get(0);
      DomParentStrategy strategy = stub == null ? new StubParentStrategy.Empty(myStub) : new StubParentStrategy(stub);
      return new IndexedElementInvocationHandler(evaluatedXmlName, description, 0, strategy, myManager, (ElementStub)stub);
    }
    final XmlTag tag = getXmlTag();
    final int index = info.second;
    if (tag != null) {
      List<XmlTag> tags = DomImplUtil.findSubTags(tag.getSubTags(), evaluatedXmlName, getFile());
      if (tags.size() > index) {
        final XmlTag child = tags.get(index);
        DomInvocationHandler handler = myManager.getDomHandler(child);
        if (!(handler instanceof IndexedElementInvocationHandler)) {
          DomInvocationHandler take2 = myManager.getDomHandler(child);
          throw new AssertionError("Expected indexed DOM, but got " + handler +
                                   ". Parent=" + tag + "; child=" + child + "; index=" + index+ "; second attempt=" + take2);

        }
        return handler;
      }
    }
    return new IndexedElementInvocationHandler(evaluatedXmlName, description, index, new VirtualDomParentStrategy(this), myManager, null);
  }
final @NotNull DomInvocationHandler getFixedChild(final Pair<? extends FixedChildDescriptionImpl, Integer> info)