Посетитель SyntaxWalker не посещает методы

Я получил этот ходок

internal class MyWalker : CSharpSyntaxWalker
{
            public int MethodCount { get; private set; }

    public MyWalker() : base(Microsoft.CodeAnalysis.SyntaxWalkerDepth.Trivia)
    { }

    public override void VisitMethodDeclaration(MethodDeclarationSyntax node)
    {
         MyMethodCount ++;
    }

    public override void VisitClassDeclaration(ClassDeclarationSyntax node)
    {
        Class++;
        Complexity++;
    }
}

Я звоню Уокеру с этим кодом

    var code = @"
    public class foo
    {
        public void MyMethod()
        {

        }
    }
";

  SyntaxTree node = CSharpSyntaxTree.ParseText(source);
  var root = node.GetRoot();

  var walker = new MyWalker();
  walker.Visit(root);

но посещение MethodDeclaration никогда не вызывается.

Чтобы убедиться, что я сравнил с SyntaxTree Analyzer, я вижу, что roslyn должен распознавать его как объявление метода. введите описание изображения здесь

Что мне не хватает?

1 ответ

Решение

Я нашел это. У меня не было базового вызова в методе класса посещения. так что просто моя ошибка

так и должно быть

   public override void VisitClassDeclaration(ClassDeclarationSyntax node)
        {
[...]
            base.VisitClassDeclaration(node); // this was missing
        }
Другие вопросы по тегам