@Override
  public final SimpleNode @NotNull [] getChildren() {
    SimpleNode[] cached = myChildren;
    if (cached != null) return cached;

    SimpleNode[] children = buildChildren();
    if (children == null) throw new NullPointerException("no children from " + getClass());
    for (int i = 0; i < children.length; i++) {
      if (children[i] == null) throw new NullPointerException("no child at " + i + " from " + getClass());
    }
    myChildren = children;
    onChildrenBuilt();
    return children;
  }
@Override
  public final SimpleNode @NotNull [] getChildren()