Example #1
0
        protected override bool OnExecute(BuildContext context)
        {
            Debug.Assert(_group != null);
            if (_group == null)
            {
                return(false);
            }

            ReferenceGroupContext groupContext =
                context.GroupContexts[_group.Id] as ReferenceGroupContext;

            if (groupContext == null)
            {
                throw new BuildException(
                          "The group context is not provided, and it is required by the build system.");
            }

            // Create the documents...
            string reflectionFile = groupContext["$ReflectionFile"];
            string refInfoFile    = Path.ChangeExtension(reflectionFile, ".org");

            string workingDir = this.WorkingDirectory;

            _listDocuments = new List <ReferenceDocument>();
            // the reflection file...
            ReferenceDocument document = new ReferenceDocument(
                Path.Combine(workingDir, refInfoFile),
                ReferenceDocumentType.Reflection);

            _listDocuments.Add(document);
            // the comment files...
            IList <string> commentFiles = groupContext.CommentFiles;

            if (commentFiles != null && commentFiles.Count != 0)
            {
                for (int i = 0; i < commentFiles.Count; i++)
                {
                    document = new ReferenceDocument(commentFiles[i],
                                                     ReferenceDocumentType.Comments);
                    _listDocuments.Add(document);
                }
            }

            if (_listDocuments == null || _listDocuments.Count == 0)
            {
                return(false);
            }

            // We need the list of the available configurations from the
            // reference settings...
            BuildSettings settings = context.Settings;

            Debug.Assert(settings != null,
                         "The settings is not associated with the context.");
            if (settings == null)
            {
                return(false);
            }
            BuildEngineSettingsList listSettings = settings.EngineSettings;

            Debug.Assert(listSettings != null,
                         "The settings does not include the engine settings.");
            if (listSettings == null || listSettings.Count == 0)
            {
                return(false);
            }
            _engineSettings = listSettings[BuildEngineType.Reference] as ReferenceEngineSettings;

            Debug.Assert(_engineSettings != null,
                         "The settings does not include the reference engine settings.");
            if (_engineSettings == null)
            {
                return(false);
            }

            // 1. Create all the reference visitors...
            this.PrepareVisitors(context);
            if ((_dictVisitors == null || _dictVisitors.Count == 0) ||
                (_listConfigurations == null || _listConfigurations.Count == 0))
            {
                return(true);
            }

            // 2. Initialize all the reference visitors...
            ICollection <ReferenceVisitor> listVisitors = _dictVisitors.Values;

            foreach (ReferenceVisitor visitor in listVisitors)
            {
                visitor.Initialize(context, _group);
            }

            // 3. Process the configurations...
            this.ProcessDocuments(context);

            // 4. Un-initialize all the reference visitors...
            foreach (ReferenceVisitor visitor in listVisitors)
            {
                visitor.Uninitialize();
            }

            return(true);
        }
        private bool ProcessTocVisitors(BuildContext context, BuildGroupContext groupContext)
        {
            // We need the list of the available configurations from the
            // reference settings...
            BuildSettings settings = context.Settings;

            Debug.Assert(settings != null,
                         "The settings is not associated with the context.");
            if (settings == null)
            {
                return(false);
            }
            BuildEngineSettingsList listSettings = settings.EngineSettings;

            Debug.Assert(listSettings != null,
                         "The settings does not include the engine settings.");
            if (listSettings == null || listSettings.Count == 0)
            {
                return(false);
            }
            _engineSettings = listSettings[BuildEngineType.Reference] as ReferenceEngineSettings;

            Debug.Assert(_engineSettings != null,
                         "The settings does not include the reference engine settings.");
            if (_engineSettings == null)
            {
                return(false);
            }

            string tocFilePath = Path.Combine(this.WorkingDirectory,
                                              groupContext["$TocFile"]);

            if (File.Exists(tocFilePath))
            {
                _listDocuments = new List <ReferenceDocument>();

                ReferenceDocument document = new ReferenceDocument(
                    tocFilePath, ReferenceDocumentType.TableOfContents);

                _listDocuments.Add(document);
            }

            if (_listDocuments == null || _listDocuments.Count == 0)
            {
                return(false);
            }

            // 1. Create all the reference visitors...
            this.PrepareVisitors(context);
            if (_dictVisitors == null || _dictVisitors.Count == 0)
            {
                return(true);
            }

            // 2. Initialize all the reference visitors...
            ICollection <ReferenceTocVisitor> listVisitors = _dictVisitors.Values;

            foreach (ReferenceTocVisitor visitor in listVisitors)
            {
                visitor.Initialize(context, _group);
            }

            // 3. Process the configurations...
            this.ProcessDocuments(context);

            // 4. Un-initialize all the reference visitors...
            foreach (ReferenceTocVisitor visitor in listVisitors)
            {
                visitor.Uninitialize();
            }

            return(true);
        }
Example #3
0
        private bool OnEndModel(BuildContext context)
        {
            BuildGroupContext groupContext = context.GroupContexts[_group.Id];

            if (groupContext == null)
            {
                throw new BuildException(
                          "The group context is not provided, and it is required by the build system.");
            }

            string workingDir = context.WorkingDirectory;

            // We need the list of the available configurations from the
            // reference settings...
            BuildSettings settings = context.Settings;

            Debug.Assert(settings != null,
                         "The settings is not associated with the context.");
            if (settings == null)
            {
                return(false);
            }
            BuildEngineSettingsList listSettings = settings.EngineSettings;

            Debug.Assert(listSettings != null,
                         "The settings does not include the engine settings.");
            if (listSettings == null || listSettings.Count == 0)
            {
                return(false);
            }
            ReferenceEngineSettings engineSettings =
                listSettings[BuildEngineType.Reference] as ReferenceEngineSettings;

            Debug.Assert(engineSettings != null,
                         "The settings does not include the reference engine settings.");
            if (engineSettings == null)
            {
                return(false);
            }

            // We currently only change the file name of the root namespace,
            // if any, to avoid overrides in multiple API builds...
            if (!engineSettings.RootNamespaceContainer)
            {
                return(true);
            }

            string reflectionFile = String.Empty;

            if (!String.IsNullOrEmpty(workingDir) && Directory.Exists(workingDir))
            {
                reflectionFile = Path.Combine(workingDir, groupContext["$ReflectionFile"]);
            }
            if (!File.Exists(reflectionFile))
            {
                return(false);
            }
            XmlDocument document = new XmlDocument();

            document.Load(reflectionFile);

            XmlNode projectNode = document.SelectSingleNode(
                "reflection/apis/api[@id='R:Project']");

            if (projectNode == null)
            {
                return(false);
            }
            XmlNode fileNode = projectNode.SelectSingleNode("file");

            if (fileNode == null)
            {
                return(false);
            }

            if (String.Equals(fileNode.Attributes["name"].Value,
                              "d4648875-d41a-783b-d5f4-638df39ee413", StringComparison.OrdinalIgnoreCase))
            {
                fileNode.Attributes["name"].Value = _group.Id.ToLower();
                document.Save(reflectionFile);
            }

            return(true);
        }