2016-08-04 25 views
1

Ich habe diese GehhilfeSyntaxWalker Besucher nicht besuchen diese Methoden nicht

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

Ich nenne den Wanderer mit diesem Code

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

     } 
    } 
"; 

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

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

aber der Besuch MethodDeclaration nie aufgerufen.

Um sicherzugehen, dass ich mit dem SyntaxTree Analyzer verglichen habe, kann ich sehen, dass Roslyn es als Methodendeklaration erkennen sollte. enter image description here

Was fehlt mir?

+0

sein Was in 'GetRoot' ist? –

+0

ist nur ein Wrapper der bestehenden Ich ändere den Code. –

Antwort

5

Ich habe es gefunden. Ich hatte den Basisaufruf in der Besuchsklassenmethode nicht. so nur ein Fehler von mir

so sollte es

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