Почему я не могу получить все 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);
к методу.