IdentifierToken не попадет в Roslyn Analyzer - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь написать анализатор Roslyn, который должен перехватывать вызовы вызова функции WaitForExternalEvent и выполнять некоторую логику с аргументами этой функции.У меня есть синтаксическое дерево, которое выглядит как

Syntax tree

В кодовой форме это выглядит как

 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.Есть ли предел тому, насколько глубокими могут быть токены?Как мне найти эти звонки?

1 Ответ

0 голосов
/ 03 февраля 2019

Мне кажется, что вам нужно зарегистрировать действие, используя SyntaxKind.GenericName вместо SyntaxKind.IdentifierName.Затем в вашем методе AnalyzeSyntax вы хотите привести context.Node к типу GenericName.

Это то, что Syntax Visualizer показывает мне, когда я выделяю WaitForExternalEvent<List<Application>>.

enter image description here

Итак, настройте действие следующим образом:

context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);

И запуск вашего метода должен сделать это:

private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
    var syntax = context.Node as GenericNameSyntax;
}

И мне удалось добиться того, чтобы он достиг точки останова.enter image description here

...