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!");
}