in lib/src/rules/unnecessary_null_checks.dart [39:83]
DartType? getExpectedType(PostfixExpression node) {
var realNode =
node.thisOrAncestorMatching((e) => e.parent is! ParenthesizedExpression);
var parent = realNode?.parent;
// in return value
if (parent is ReturnStatement || parent is ExpressionFunctionBody) {
var parentExpression = parent?.thisOrAncestorOfType<FunctionExpression>();
if (parentExpression == null) {
return null;
}
var staticType = parentExpression.staticType;
return staticType is FunctionType ? staticType.returnType : null;
}
// assignment
if (parent is AssignmentExpression &&
parent.operator.type == TokenType.EQ &&
(parent.leftHandSide is! Identifier ||
node.operand is! Identifier ||
(parent.leftHandSide as Identifier).name !=
(node.operand as Identifier).name)) {
return parent.writeType;
}
// in variable declaration
if (parent is VariableDeclaration) {
return parent.declaredElement?.type;
}
// as right member of binary operator
if (parent is BinaryExpression && parent.rightOperand == realNode) {
var parentElement = parent.staticElement;
if (parentElement == null) {
return null;
}
return parentElement.parameters.first.type;
}
// as parameter of function
if (parent is NamedExpression) {
realNode = parent;
parent = parent.parent;
}
if (parent is ArgumentList && realNode is Expression) {
return realNode.staticParameterElement?.type;
}
return null;
}