@NotNull
  private static <T> DataNode<T> copy(@NotNull DataNode<T> dataNode, @Nullable DataNode<?> newParent) {
    DataNode<T> copy = nodeCopy(dataNode);
    copy.parent = newParent;
    if (dataNode.children != null) {
      copy.initChildren(ContainerUtil.map(dataNode.children, child -> copy(child, copy)));
    }
    return copy;
  }
@NotNull
  private static <T> DataNode<T> copy(@NotNull DataNode<T> dataNode, @Nullable DataNode<?> newParent)