| Passing a literal `null` to an `Optional` accepting parameter is likely a bug. | |
| `Optional` is already designed to encode missing values through a non-`null` | |
| instance. | |
| ```java | |
| Optional<Integer> double(Optional<Integer> i) { | |
| return i.map(i -> i * 2); | |
| } | |
| Optional<Integer> doubled = double(null); | |
| ``` | |
| ```java | |
| Optional<Integer> doubled = double(Optional.empty()); | |
| ``` | |
| This is a scenario that can easily happen when refactoring code from accepting | |
| `@Nullable` parameters to accept `Optional`s. Note that the check will not match | |
| if the parameter is explicitly annotated `@Nullable`. |