@Contract(pure=true)
  public static <T> T @NotNull [] prepend(T element, T @NotNull [] array, @NotNull Class<T> type) {
    int length = array.length;
    T[] result = newArray(type, length + 1);
    System.arraycopy(array, 0, result, 1, length);
    result[0] = element;
    return result;
  }
@Contract(pure=true)
  public static <T> T @NotNull [] prepend(T element, T @NotNull [] array, @NotNull Class<T> type)