@Override
  @NotNull ListResult doLoadChildren(final int parentId) throws IOException {
    PersistentFSConnection.ensureIdIsValid(parentId);
    if (parentId == SUPER_ROOT_ID) {
      throw new AssertionError(
        "Incorrect call .doLoadChildren() with a super-root record id(=" + SUPER_ROOT_ID + "). " +
        "Super-root is a special file record for internal use, it MUST NOT be used directly");
    }

    final PersistentFSRecordsStorage records = connection.getRecords();

    //MAYBE RC: .listIds() and .doLoadChildren() both contains same code for reading&parsing children array. It seems
    //         they were implemented this way for optimization i.e. to avoid creating childrenIds array. Could be
    //         useful to check does it really matter -- otherwise code could be simplified, as below:
    //final int[] childrenIds = listIds(parentId);
    //if(childrenIds.length == 0){
    //  return new ListResult(Collections.emptyList(), parentId);
    //}else{
    //  final List<ChildInfo> children =  new ArrayList<>(childrenIds.length);
    //  for (int childId : childrenIds) {
    //    final int nameId = records.getNameId(childId);
    //    final ChildInfo child = new ChildInfoImpl(childId, nameId, null, null, null);
    //    children.add(child);
    //  }
    //  return new ListResult(children, parentId);
    //}

    final int parentModCount = records.getModCount(parentId);
    final ListResult result = attributeAccessor.readAttributeRaw(parentId, CHILDREN_ATTR, buffer -> {
      final int count = DataInputOutputUtil.readINT(buffer);
      final List<ChildInfo> children = (count == 0) ? Collections.emptyList() : new ArrayList<>(count);
      final int maxID = connection.getRecords().maxAllocatedID();
      int prevId = parentId;
      for (int i = 0; i < count; i++) {
        final int childId = DataInputOutputUtil.readINT(buffer) + prevId;
        checkChildIdValid(parentId, childId, i, maxID);
        prevId = childId;
        final int nameId = records.getNameId(childId);
        checkNameIdValid(nameId, parentId, childId);
        final ChildInfo child = new ChildInfoImpl(childId, nameId, null, null, null);
        children.add(child);
      }
      return new ListResult(parentModCount, children, parentId);
    });
    if (result == null) {
      return new ListResult(parentModCount, Collections.emptyList(), parentId);
    }
    return result;
  }
@Override
  @NotNull ListResult doLoadChildren(final int parentId)