static bool matchesArgumentsWithParameters()

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;
  }