public static @NotNull <T> Collection<DataNode<T>> findAllRecursively(@Nullable DataNode<?> node, @NotNull Key<T> key) {
    if (node == null) {
      return Collections.emptyList();
    }

    //noinspection unchecked
    return (Collection)findAllRecursively(node.getChildren(), it -> it.getKey().equals(key));
  }
public static @NotNull <T> Collection<DataNode<T>> findAllRecursively(@Nullable DataNode<?> node, @NotNull Key<T> key)