Exemplo n.º 1
0
		private void WriteTypeHierarchy(XmlWriter writer, DerivedTypesCollection derivedTypes, string TypeMemberID)
		{
			writer.WriteStartElement("hierarchyType");
			writer.WriteAttributeString("id", TypeMemberID);
			ArrayList interfaces = baseInterfaces.GetBaseInterfaceTypes(TypeMemberID);
			if (interfaces.Count > 0)
			{
				writer.WriteStartElement("hierarchyInterfaces");
				foreach (string baseInterfaceTypeID in interfaces)
				{
					writer.WriteStartElement("hierarchyInterface");
					writer.WriteAttributeString("id", baseInterfaceTypeID);
					writer.WriteEndElement();
				}
				writer.WriteEndElement();
			}
			ArrayList childTypesList = derivedTypes.GetDerivedTypes(TypeMemberID);
			foreach (string childTypeID in childTypesList)
			{
				WriteTypeHierarchy(writer, derivedTypes, childTypeID);
			}
			writer.WriteEndElement();
		}
Exemplo n.º 2
0
			public void Add(string namespaceName, string baseTypeMemberID, string derivedTypeMemberID)
			{
				DerivedTypesCollection derivedTypesCollection = namespaces[namespaceName] as DerivedTypesCollection;
				if (derivedTypesCollection == null)
				{
					derivedTypesCollection = new DerivedTypesCollection();
					namespaces.Add(namespaceName, derivedTypesCollection);
				}
				derivedTypesCollection.Add(baseTypeMemberID, derivedTypeMemberID);
			}
Exemplo n.º 3
0
		/// <summary>Builds an Xml file combining the reflected metadata with the /doc comments.</summary>
		private void BuildXml(XmlWriter writer)
		{
			int start = Environment.TickCount;

			Debug.WriteLine("Memory making xml: " + GC.GetTotalMemory(false).ToString());

			try
			{
				assemblyLoader = SetupAssemblyLoader();

				string DocLangCode = Enum.GetName(typeof(SdkLanguage), this.rep.SdkDocLanguage).Replace("_", "-");
				externalSummaryCache = new ExternalXmlSummaryCache(DocLangCode);

				notEmptyNamespaces = new Hashtable();

				namespaceHierarchies = new NamespaceHierarchyCollection();
				baseInterfaces = new BaseInterfacesCollection();
				derivedTypes = new DerivedTypesCollection();
				interfaceImplementingTypes = new InterfaceImplementingTypesCollection();
				attributeFilter = new AttributeUsageDisplayFilter(this.rep.DocumentedAttributes);
			
				documentedTypes = new Hashtable();
			
				PreReflectionProcess();

				string currentAssemblyFilename = "";

				try
				{
					// Start the document with the XML declaration tag
					writer.WriteStartDocument();

					// Start the root element
					writer.WriteStartElement("ndoc");
					writer.WriteAttributeString("SchemaVersion", "1.3");

					if (this.rep.FeedbackEmailAddress.Length > 0)
						WriteFeedBackEmailAddress(writer);

					if (this.rep.CopyrightText.Length > 0)
						WriteCopyright(writer);

					if (this.rep.IncludeDefaultThreadSafety)
						WriteDefaultThreadSafety(writer);

					if (this.rep.Preliminary)
						writer.WriteElementString("preliminary", "");

					WriteNamespaceHierarchies(writer);

					foreach (string AssemblyFileName in this.rep.AssemblyFileNames)
					{
						currentAssemblyFilename = AssemblyFileName;
						Assembly assembly = assemblyLoader.LoadAssembly(currentAssemblyFilename);

						int starta = Environment.TickCount;

						WriteAssembly(writer, assembly);

						Trace.WriteLine("Completed " + assembly.FullName);
						Trace.WriteLine(((Environment.TickCount - starta) / 1000.0).ToString() + " sec.");
					}

					writer.WriteEndElement();
					writer.WriteEndDocument();
					writer.Flush();

					Trace.WriteLine("MakeXML : " + ((Environment.TickCount - start) / 1000.0).ToString() + " sec.");

					// if you want to see NDoc's intermediate XML file, use the XML documenter.
				}
				finally
				{
					if (assemblyLoader != null)
					{
						assemblyLoader.Deinstall();
					}
				}
			}
			catch(ReflectionTypeLoadException rtle)
			{
				StringBuilder sb = new StringBuilder();
				if (assemblyLoader.UnresolvedAssemblies.Count>0)
				{
					sb.Append("One or more required assemblies could not be located : \n");
					foreach(string ass in assemblyLoader.UnresolvedAssemblies)
					{
						sb.AppendFormat("   {0}\n",ass);
					}
					sb.Append("\nThe following directories were searched, \n");
					foreach(string dir in assemblyLoader.SearchedDirectories)
					{
						sb.AppendFormat("   {0}\n",dir);
					}
				}
				else
				{
					Hashtable fileLoadExceptions = new Hashtable();
					foreach(Exception loaderEx in rtle.LoaderExceptions)
					{
						System.IO.FileLoadException fileLoadEx = loaderEx as System.IO.FileLoadException;
						if (fileLoadEx !=null)
						{
							if (!fileLoadExceptions.ContainsKey(fileLoadEx.FileName))
							{
								fileLoadExceptions.Add(fileLoadEx.FileName,null);
								sb.Append("Unable to load: " + fileLoadEx.FileName + "\r\n");
							}
						}
						sb.Append(loaderEx.Message + Environment.NewLine);
						sb.Append(loaderEx.StackTrace + Environment.NewLine);
						sb.Append("--------------------" + Environment.NewLine + Environment.NewLine);
					}
				}
				throw new DocumenterException(sb.ToString());
			}
		}