@NotNull
    @Override
    public final Collection<AbstractTreeNode<?>> getChildren() {
      if (childrenValid) {
        return children;
      }
      Collection<AbstractTreeNode<?>> oldChildren = children;
      Collection<AbstractTreeNode<?>> newChildren = createChildren(oldChildren);
      oldChildren.forEach(node -> node.setParent(null));
      newChildren.forEach(node -> node.setParent(this));
      children = newChildren;
      childrenValid = true;
      return newChildren;
    }
@NotNull
    @Override
    public final Collection<AbstractTreeNode<?>> getChildren()