@SuppressWarnings("unchecked")
  @Nullable
  public <P> DataNode<P> getParent(@NotNull Class<P> dataClass) {
    if (dataClass.isInstance(data)) {
      return (DataNode<P>)this;
    }
    for (DataNode<?> p = parent; p != null; p = p.parent) {
      if (dataClass.isInstance(p.data)) {
        return (DataNode<P>)p;
      }
    }
    return null;
  }
@SuppressWarnings("unchecked")
  @Nullable
  public <P> DataNode<P> getParent(@NotNull Class<P> dataClass)