我正在尝试编写一个Roslyn分析器,该分析器需要拦截对函数调用WaitForExternalEvent
的调用,并对该函数的参数执行一些逻辑。我有一棵看起来像
在代码的形式,它看起来像
public static class HireEmployee
{
[FunctionName("HireEmployee")]
public static async Task<Application> RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context,
ILogger log)
{
var applications = context.GetInput<List<Application>>();
var approvals = await context.WaitForExternalEvent<List<Application>>("ApplicationsFiltered");
log.LogInformation($"Approval received. {approvals.Count} applicants approved");
return approvals.OrderByDescending(x => x.Score).First();
}
...
当我注册动作此我这样做等
context.RegisterSyntaxNodeAction(AnalyzeSyntax, SyntaxKind.IdentifierName);
在我的AnalyzeSyntax
方法内的断点确实为IdentifierName令牌命中了断点,但从未为WaitForExternalEvent
令牌命中断点。是有一些限制的令牌有多深,可以吗?我应该如何去寻找有关这些电话?
答案 0 :(得分:1)
在我看来,您需要使用SyntaxKind.GenericName
而不是SyntaxKind.IdentifierName
注册操作。然后,在您的AnalyzeSyntax
方法中,您想将context.Node
转换为GenericName
类型。
这是当我突出显示WaitForExternalEvent<List<Application>>
时,语法可视化器向我显示的内容。
因此,请设置以下操作:
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);
方法的开始应该这样做:
private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
var syntax = context.Node as GenericNameSyntax;
}