示例#1
0
        /// <summary>
        /// Gets all type declarations made in the current codebase that is being compiled.
        /// This is a tool method to be used in more complex achievements.
        /// This method is caching and can be called without discretion, and is thread safe.
        /// </summary>
        /// <param name="buildInformation">BuildInformation object used to locate the codebase</param>
        /// <returns>Cached collection of TypeDeclarationInfo</returns>
        public IEnumerable <TypeDeclarationInfo> GetCodebaseTypeDeclarations(BuildInformation buildInformation)
        {
            lock (codebaseTypeDefinitionPadLock)
            {
                if (codebaseTypeDefinitions == null)
                {
                    codebaseTypeDefinitions = new List <TypeDeclarationInfo>();

                    foreach (var filename in buildInformation.CodeFiles)
                    {
                        var parser = GetParser(filename);
                        var typeDeclarationInfoVisitor = new TypeDeclarationVisitor();
                        parser.CompilationUnit.AcceptVisitor(typeDeclarationInfoVisitor, null);

                        codebaseTypeDefinitions.AddRange(typeDeclarationInfoVisitor.TypeDeclarations);
                    }
                }

                return(codebaseTypeDefinitions);
            }
        }
示例#2
0
 public override R Accept <R>(TypeDeclarationVisitor <R> vis)
 {
     return(vis.Visit(this));
 }
示例#3
0
 public override void Accept(TypeDeclarationVisitor vis)
 {
     vis.Visit(this);
 }
示例#4
0
 public abstract R Accept <R>(TypeDeclarationVisitor <R> vis);
示例#5
0
 public abstract void Accept(TypeDeclarationVisitor vis);