@NotNull
  public Collection<DataNode<?>> getChildren() {
    if (children == null || children.isEmpty()) return Collections.emptyList();

    List<DataNode<?>> result = childrenView;
    if (result == null) {
      result = Collections.unmodifiableList(children);
      childrenView = result;
    }
    return result;
  }
@NotNull
  public Collection<DataNode<?>> getChildren()