Почему я не могу получить все ObjectCreationExpressionSyntax, если инициализирован как ноль?

Итак, у меня есть узел MethodDeclarationSyntax, который я передаю в CSharpSyntaxWalker со следующими переопределениями

        public override void VisitObjectCreationExpression(ObjectCreationExpressionSyntax node)
    {
        LiteralExpressionCollector literalCollector = new LiteralExpressionCollector();
        literalCollector.Visit(node.ArgumentList);
        if (literalCollector.Literals.Count > 0)
            Creations.Add(node, literalCollector.Literals);
    }

        public override void VisitAssignmentExpression(AssignmentExpressionSyntax node)
    {
        LiteralExpressionCollector literalCollector = new LiteralExpressionCollector();
        var assigment = node.ChildNodes().FirstOrDefault(l => l is LiteralExpressionSyntax);
        if(assigment != null)
            literalCollector.Visit(assigment);
        if (literalCollector.Literals.Count > 0)
            Assigments.Add(node, literalCollector.Literals);

    }

Он перехватывает все ObjectCreationExpressionSyntax в следующей форме:

ResolveBomForMaterialInput rbfmiInput = new ResolveBomForMaterialInput()

Но не следующее:

FlowStructureScenario flowScenario = null;
flowScenario = new FlowStructureScenario("F", "F:3");

Есть идеи, почему это происходит? Я не думаю, что это имеет значение, но я использую SyntaxWalkerDepth.Token в качестве глубины.

В настоящее время используется версия: Microsoft.CodeAnalysis 1.3.2

1 ответ

Решение

Проблема в том, что ваш код в VisitAssignmentExpression останавливает синтаксическую прогулку, как только встречает выражение присваивания. Если вы хотите продолжить обход своих дочерних узлов, вы можете добавить base.VisitAssignmentExpression(node); к методу.

Другие вопросы по тегам