Beispiel #1
0
        public static IParameterSymbol DetermineParameter(
            this ArgumentSyntax argument,
            ImmutableArray <IParameterSymbol> parameters,
            bool allowParams = false,
            CancellationToken cancellationToken = default)
        {
            argument.ThrowOnNull(nameof(argument));

            if (!(argument.Parent is BaseArgumentListSyntax argumentList))
            {
                return(null);
            }

            // Handle named argument
            if (argument.NameColon != null && !argument.NameColon.IsMissing)
            {
                string name = argument.NameColon.Name.Identifier.ValueText;
                return(parameters.FirstOrDefault(p => p.Name == name));
            }

            // Handle positional argument
            int index = argumentList.Arguments.IndexOf(argument);

            if (index < 0)
            {
                return(null);
            }

            if (index < parameters.Length)
            {
                return(parameters[index]);
            }

            if (allowParams)
            {
                IParameterSymbol lastParameter = parameters.LastOrDefault();
                if (lastParameter == null)
                {
                    return(null);
                }

                if (lastParameter.IsParams)
                {
                    return(lastParameter);
                }
            }

            return(null);
        }