null_check_on_nullable_type_parameter
Don't use null check on a potentially nullable type parameter.
Details
#DON'T use null check on a potentially nullable type parameter.
Given a generic type parameter T which has a nullable bound (e.g., the default
bound of Object?), it is very easy to introduce erroneous null checks when
working with a variable of type T?. Specifically, it is not uncommon to have
T? x; and want to assert that x has been set to a valid value of type T.
A common mistake is to do so using x!. This is almost always incorrect, since
if T is a nullable type, x may validly hold null as a value of type T.
BAD:
T run<T>(T callback()) {
T? result;
(() { result = callback(); })();
return result!;
}GOOD:
T run<T>(T callback()) {
T? result;
(() { result = callback(); })();
return result as T;
}
Enable
#To enable the null_check_on_nullable_type_parameter rule,
add null_check_on_nullable_type_parameter under linter > rules in your
analysis_options.yaml file:
linter:
rules:
- null_check_on_nullable_type_parameterIf you're instead using the YAML map syntax to configure linter rules,
add null_check_on_nullable_type_parameter: true under linter > rules:
linter:
rules:
null_check_on_nullable_type_parameter: true