public void WalkASTDeep() { string source = @" namespace MyNamespaceA { public class MyClassA { } public class MyClassB { } namespace MyNamespaceB { public class MyClassC { } public class MyClassD { } } } "; int traversedClassesCount = 0; // Getting the AST node CSharpSyntaxTree tree = ASTExtractor.Extract(source); var node = new NodeLocator(tree).LocateLast(typeof(CompilationUnitSyntax)) as CSharpSyntaxNode; // Calling the walker var astWalker = new MultiPurposeASTWalker(node, syntaxNode => syntaxNode as ClassDeclarationSyntax != null, delegate { traversedClassesCount++; }, false); astWalker.Start(); // Checking Assert.AreEqual(4, traversedClassesCount, "Expected walker to deep traverse AST!"); }
public void WalkASTOnlyRootLevel() { string source = @" namespace MyNamespaceA { public class MyClassA { } public class MyClassB { } namespace MyNamespaceB { public class MyClassC { } public class MyClassD { } } } namespace MyNamespaceC { } "; int traversedClassesCount = 0; int traversedNamespacesCount = 0; // Getting the AST node CSharpSyntaxTree tree = ASTExtractor.Extract(source); var node = new NodeLocator(tree).LocateLast(typeof(CompilationUnitSyntax)) as CSharpSyntaxNode; // Calling the walker var astClassWalker = new MultiPurposeASTWalker(node, syntaxNode => syntaxNode as ClassDeclarationSyntax != null, delegate { traversedClassesCount++; }, true); astClassWalker.Start(); //var astNamespaceWalker = new MultiPurposeASTWalker(node, // syntaxNode => syntaxNode as NamespaceDeclarationSyntax != null, // delegate // { // traversedNamespacesCount++; // }, // true); //astNamespaceWalker.Start(); // Checking Assert.AreEqual(0, traversedClassesCount, "Expected walker to root level traverse AST!"); //Assert.AreEqual(2, traversedNamespacesCount, "Expected walker to root level traverse AST!"); }