2016-08-04 81 views
1

我得到這個學步車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分析器相比較,我可以看出roslyn應該將它識別爲方法聲明。 enter image description here

我錯過了什麼?

+0

是什麼在'GetRoot'? –

+0

其現有的唯一一個包裝我改變了代碼。 –

回答

5

我找到了。我在訪問類方法中沒有基礎調用。所以只是一個礦井

bug,因此它應該是

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