SyntaxWalker Visitor不访问Methods

时间:2016-08-04 09:17:11

标签: c# roslyn roslyn-code-analysis microsoft.codeanalysis

我有这个步行者

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++;
    }
}

我使用此代码调用walker

    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应该将其识别为Method声明。 enter image description here

我错过了什么?

1 个答案:

答案 0 :(得分:5)

我找到了。我没有访问类方法中的基本调用。所以只是我的一个错误

所以它应该是

   public override void VisitClassDeclaration(ClassDeclarationSyntax node)
        {
[...]
            base.VisitClassDeclaration(node); // this was missing
        }