private static bool VariablePassedAsArgumentToInvokedMethod()

in src/Microsoft.VisualStudio.SDK.Analyzers/VSSDK007ThreadHelperJTFRunAsync.cs [346:386]


        private static bool VariablePassedAsArgumentToInvokedMethod(
            string variableName,
            InvocationExpressionSyntax invocationExpr,
            out IdentifierNameSyntax? methodName,
            out int? argumentIndex)
        {
            if (string.IsNullOrEmpty(variableName))
            {
                methodName = null;
                argumentIndex = 0;
                return false;
            }

            ArgumentListSyntax? argList = invocationExpr.ChildNodes().OfType<ArgumentListSyntax>().FirstOrDefault();
            if (argList == null)
            {
                methodName = null;
                argumentIndex = 0;
                return false;
            }

            var index = 0;
            foreach (ArgumentSyntax? arg in argList.ChildNodes().OfType<ArgumentSyntax>())
            {
                foreach (IdentifierNameSyntax? identiferName in arg.ChildNodes().OfType<IdentifierNameSyntax>())
                {
                    if (identiferName.Identifier.ValueText == variableName)
                    {
                        methodName = invocationExpr.ChildNodes().OfType<IdentifierNameSyntax>().FirstOrDefault();
                        argumentIndex = index;
                        return true;
                    }
                }

                ++index;
            }

            methodName = null;
            argumentIndex = 0;
            return false;
        }