@staticmethod
def _collect_parameters(parameter_names, args, kwargs, defaults):
    """Creates a dictionary mapping parameters names to their values in the method call.

        :param parameter_names: The method's parameter names
        :type parameter_names: list[string]
        :param args: *args passed into the method
        :type args: list[object]
        :param kwargs: **kwargs passed into the method
        :type kwargs: dict[string, object]
        :param defaults: The method's default values
        :type defaults: list[object]
        :return: Dictionary mapping parameter names to values
        :rtype: dict[string, object]
        """
    parameters = {}
    if defaults is not None:
        zipped_defaults = zip(reversed(parameter_names), reversed(defaults))
        for name, default in zipped_defaults:
            parameters[name] = default
    for name, value in zip(parameter_names, args):
        parameters[name] = value
    for name, value in kwargs.items():
        parameters[name] = value
    return parameters
