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