in lib/src/rules/prefer_iterable_whereType.dart [52:89]
void visitMethodInvocation(MethodInvocation node) {
if (node.methodName.name != 'where') return;
var target = node.realTarget;
if (target == null ||
!DartTypeUtilities.implementsInterface(
target.staticType, 'Iterable', 'dart.core')) {
return;
}
var args = node.argumentList.arguments;
if (args.length != 1) return;
var arg = args.first;
if (arg is FunctionExpression) {
if (arg.parameters?.parameters.length != 1) return;
var body = arg.body;
Expression? expression;
if (body is BlockFunctionBody) {
var statements = body.block.statements;
if (statements.length != 1) return;
var statement = body.block.statements.first;
if (statement is ReturnStatement) {
expression = statement.expression;
}
} else if (body is ExpressionFunctionBody) {
expression = body.expression;
}
expression = expression?.unParenthesized;
if (expression is IsExpression && expression.notOperator == null) {
var target = expression.expression;
if (target is SimpleIdentifier &&
target.name == arg.parameters?.parameters.first.identifier?.name) {
rule.reportLint(node.methodName);
}
}
}
}