in src/WebJobs.Extensions.DurableTask.Analyzers/Analyzers/Orchestrator/TimerAnalyzer.cs [86:124]
private static bool AnalyzeIdentifierThread(SyntaxNode method, CompilationAnalysisContext context, SemanticModel semanticModel)
{
var diagnosedIssue = false;
foreach (SyntaxNode descendant in method.DescendantNodes())
{
if (descendant is IdentifierNameSyntax identifierName)
{
version = SyntaxNodeUtils.GetDurableVersion(semanticModel);
var identifierText = identifierName.Identifier.ValueText;
if (identifierText == "Sleep")
{
var memberAccessExpression = identifierName.Parent;
if (SyntaxNodeUtils.TryGetISymbol(semanticModel, memberAccessExpression, out ISymbol memberSymbol))
{
if (memberSymbol != null && memberSymbol.ToString().StartsWith("System.Threading.Thread"))
{
if (TryGetRuleFromVersion(out DiagnosticDescriptor rule))
{
var expression = GetAwaitOrInvocationExpression(memberAccessExpression);
var diagnostic = Diagnostic.Create(rule, expression.GetLocation(), expression);
if (context.Compilation.ContainsSyntaxTree(method.SyntaxTree))
{
context.ReportDiagnostic(diagnostic);
}
diagnosedIssue = true;
}
}
}
}
}
}
return diagnosedIssue;
}