@Contract(value = "!null, _, _ -> param1; null, !null, _ -> param2; null, null, _ -> param3;", pure = true)
  public static @NotNull <T> T notNull(@Nullable T value1, @Nullable T value2, @NotNull T defaultValue) {
    return notNull(value1, notNull(value2, defaultValue));
  }
@Contract(value = "!null, _, _ -> param1; null, !null, _ -> param2; null, null, _ -> param3;", pure = true)
  public static @NotNull <T> T notNull(@Nullable T value1, @Nullable T value2, @NotNull T defaultValue)