private static IEnumerable <ParameterInstances> GetArgumentsDefinitions(MethodInfo benchmark, Type target, SummaryStyle summaryStyle)
        {
            var argumentsAttributes = benchmark.GetCustomAttributes <PriorityAttribute>();
            int priority            = argumentsAttributes.Select(attribute => attribute.Priority).Sum();

            var parameterDefinitions = benchmark.GetParameters()
                                       .Select(parameter => new ParameterDefinition(parameter.Name, false, Array.Empty <object>(), true, parameter.ParameterType, priority))
                                       .ToArray();

            if (parameterDefinitions.IsEmpty())
            {
                yield return(new ParameterInstances(Array.Empty <ParameterInstance>()));

                yield break;
            }

            foreach (var argumentsAttribute in benchmark.GetCustomAttributes <ArgumentsAttribute>())
            {
                if (parameterDefinitions.Length != argumentsAttribute.Values.Length)
                {
                    throw new InvalidOperationException($"Benchmark {benchmark.Name} has invalid number of defined arguments provided with [Arguments]! {argumentsAttribute.Values.Length} instead of {parameterDefinitions.Length}.");
                }

                yield return(new ParameterInstances(
                                 argumentsAttribute
                                 .Values
                                 .Select((value, index) =>
                {
                    var definition = parameterDefinitions[index];
                    var type = definition.ParameterType;
                    return new ParameterInstance(definition, Map(value, type), summaryStyle);
                })
                                 .ToArray()));
            }

            if (!benchmark.HasAttribute <ArgumentsSourceAttribute>())
            {
                yield break;
            }

            var argumentsSourceAttribute = benchmark.GetCustomAttribute <ArgumentsSourceAttribute>();

            var valuesInfo = GetValidValuesForParamsSource(target, argumentsSourceAttribute.Name);

            for (int sourceIndex = 0; sourceIndex < valuesInfo.values.Length; sourceIndex++)
            {
                yield return(SmartParamBuilder.CreateForArguments(benchmark, parameterDefinitions, valuesInfo, sourceIndex, summaryStyle));
            }
        }