예제 #1
0
 public void Add(CSharpFileModel fileModel, String @namespace, SyntaxNode node)
 {
     lock (namespaceGeneratorMap)
     {
         GetOrCreatGenerator(@namespace).Add(fileModel, node);
     }
 }
예제 #2
0
        public void ProjectLoaded(Task <Project> task)
        {
            project = task.Result;

            this.assemblyPackageName = CSharpToD.GetAssemblyPackageName(project.AssemblyName);
            if (config.outputType.HasValue)
            {
                this.outputType = config.outputType.Value;
            }
            else
            {
                throw new NotImplementedException();
            }

            Console.WriteLine("[{0}] Loaded project (AssemblyPackage='{1}', ProjectFile='{2}')",
                              Thread.CurrentThread.ManagedThreadId, assemblyPackageName, fileFullPath);

            //
            // Check Source Defines
            //
            if (CSharpToD.config.sourceDefines.Count > 0)
            {
                CSharpParseOptions parseOptions       = (CSharpParseOptions)project.ParseOptions;
                var           preprocessorSymbolNames = parseOptions.PreprocessorSymbolNames;
                List <string> newSymbolNames          = null;
                foreach (string configured in CSharpToD.config.sourceDefines)
                {
                    if (!System.Linq.Enumerable.Contains(preprocessorSymbolNames, configured))
                    {
                        if (newSymbolNames == null)
                        {
                            newSymbolNames = new List <string>();
                            newSymbolNames.AddRange(preprocessorSymbolNames);
                        }
                        Console.WriteLine("[{0}] [DEBUG] Adding SourceDefine '{1}'",
                                          Thread.CurrentThread.ManagedThreadId, configured);
                        newSymbolNames.Add(configured);
                    }
                }
                if (newSymbolNames != null)
                {
                    project = project.WithParseOptions(parseOptions.WithPreprocessorSymbols(newSymbolNames.ToArray()));
                }
            }

            //
            // Add Include Files
            //
            foreach (IncludeSource includeSource in config.includeSources)
            {
                GetOrCreatGenerator(includeSource.@namespace).AddIncludeSource(includeSource.filename);
            }

            //
            // Start tasks to process the project source files
            //
            this.filesToProcess = (uint)System.Linq.Enumerable.Count(project.Documents);
            foreach (Document document in project.Documents)
            {
                if (CSharpToD.printSourceFiles)
                {
                    Console.WriteLine("Source File: {0}", document.FilePath);
                }
                var fileModel = new CSharpFileModel(this, document);
                //Console.WriteLine("[{0}] Starting syntax loader for '{1}'...",
                //    Thread.CurrentThread.ManagedThreadId, relativePathName);

                TaskManager.AddTask(document.GetSyntaxTreeAsync().ContinueWith(fileModel.SyntaxTreeLoaded));
            }
        }
예제 #3
0
 public NamespaceMultiplexVisitor(CSharpFileModel csharpFileModel)
 {
     this.csharpFileModel = csharpFileModel;
 }