private static bool IsJoinableTaskAssigned()

in src/Microsoft.VisualStudio.SDK.Analyzers/VSSDK007ThreadHelperJTFRunAsync.cs [180:215]


        private static bool IsJoinableTaskAssigned(InvocationExpressionSyntax invocationExpr, out SyntaxNode? assignedToNode, out SyntaxToken? assignedToToken)
        {
            if (invocationExpr.Parent == null)
            {
                assignedToNode = null;
                assignedToToken = null;
                return false;
            }

            // Look for assignment to existing variable/field:  myVarOrField = ThreadHelper.JoinableTaskFactory.RunAsync(...)
            if (invocationExpr.Parent.IsKind(SyntaxKind.SimpleAssignmentExpression))
            {
                var assignmentExpr = (AssignmentExpressionSyntax)invocationExpr.Parent;
                assignedToNode = assignmentExpr.Left;
                assignedToToken = ((IdentifierNameSyntax)assignedToNode).Identifier;
                return true;
            }

            // Look for assignment to new variable:  var myTask = ThreadHelper.JoinableTaskFactory.RunAsync(...)
            SyntaxNode node = invocationExpr.Parent;
            while (node != null)
            {
                if (node.IsKind(SyntaxKind.VariableDeclarator))
                {
                    assignedToNode = node;
                    assignedToToken = ((VariableDeclaratorSyntax)assignedToNode).Identifier;
                    return true;
                }

                node = node.Parent;
            }

            assignedToNode = null;
            assignedToToken = null;
            return false;
        }