Executes operations depending on conditions on nodes.
Inheritance: Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker
        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!");
        }