type NonNull[A] = NotGiven[Null <:< A] trait JBox { def put[T](t: T)(using erased NonNull[T]): Unit }
This is incorrect and changes the meaning of the code. This would be no different than this code in java:
interface JBox {
<T extends @NotNull Object> void put(T t);
}
which is not the same as the original example. The OG example allows nullable types as input.
The point explicitly is to cast away null, or “MINUS_NULL”, as jSpecify calls it.