in lib/src/util/dart_type_utilities.dart [363:413]
static bool matchesArgumentsWithParameters(
NodeList<Expression> arguments, NodeList<FormalParameter> parameters) {
var namedParameters = <String, Element?>{};
var namedArguments = <String, Element>{};
var positionalParameters = <Element?>[];
var positionalArguments = <Element>[];
for (var parameter in parameters) {
var identifier = parameter.identifier;
if (identifier != null) {
if (parameter.isNamed) {
namedParameters[identifier.name] = identifier.staticElement;
} else {
positionalParameters.add(identifier.staticElement);
}
}
}
for (var argument in arguments) {
if (argument is NamedExpression) {
var element = DartTypeUtilities.getCanonicalElementFromIdentifier(
argument.expression);
if (element == null) {
return false;
}
namedArguments[argument.name.label.name] = element;
} else {
var element =
DartTypeUtilities.getCanonicalElementFromIdentifier(argument);
if (element == null) {
return false;
}
positionalArguments.add(element);
}
}
if (positionalParameters.length != positionalArguments.length ||
namedParameters.keys.length != namedArguments.keys.length) {
return false;
}
for (var i = 0; i < positionalArguments.length; i++) {
if (positionalArguments[i] != positionalParameters[i]) {
return false;
}
}
for (var key in namedParameters.keys) {
if (namedParameters[key] != namedArguments[key]) {
return false;
}
}
return true;
}