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;
}