Inheritance: MemberData
Exemple #1
0
		public override void DoOutput ()
		{
			if (document == null)
				throw new InvalidOperationException ("Document not set");

			XmlNode nclass = document.CreateElement ("class", null);
			AddAttribute (nclass, "name", type.Name);
			string classType = GetClassType (type);
			AddAttribute (nclass, "type", classType);

			if (type.BaseType != null)
				AddAttribute (nclass, "base", Utils.CleanupTypeName (type.BaseType));

			if (type.IsSealed)
				AddAttribute (nclass, "sealed", "true");

			if (type.IsAbstract)
				AddAttribute (nclass, "abstract", "true");

			if ( (type.Attributes & TypeAttributes.Serializable) != 0 || type.IsEnum)
				AddAttribute (nclass, "serializable", "true");

			string charSet = GetCharSet (type);
			AddAttribute (nclass, "charset", charSet);

			string layout = GetLayout (type);
			if (layout != null)
				AddAttribute (nclass, "layout", layout);

			parent.AppendChild (nclass);

			AttributeData.OutputAttributes (document, nclass, GetCustomAttributes(type));

			XmlNode ifaces = null;

			foreach (TypeReference iface in  TypeHelper.GetInterfaces (type)) {
				if (!TypeHelper.IsPublic (iface))
					// we're only interested in public interfaces
					continue;

				if (ifaces == null) {
					ifaces = document.CreateElement ("interfaces", null);
					nclass.AppendChild (ifaces);
				}

				XmlNode iface_node = document.CreateElement ("interface", null);
				AddAttribute (iface_node, "name", Utils.CleanupTypeName (iface));
				ifaces.AppendChild (iface_node);
			}

			MemberData.OutputGenericParameters (document, nclass, type);

			ArrayList members = new ArrayList ();

			FieldDefinition [] fields = GetFields (type);
			if (fields.Length > 0) {
				Array.Sort (fields, MemberReferenceComparer.Default);
				FieldData fd = new FieldData (document, nclass, fields);
				members.Add (fd);
			}

			if (type.IsEnum) {
				var value_type = GetEnumValueField (type);
				if (value_type == null)
					throw new NotSupportedException ();

				AddAttribute (nclass, "enumtype", Utils.CleanupTypeName (value_type.FieldType));
			}

			MethodDefinition [] ctors = GetConstructors (type);
			if (ctors.Length > 0) {
				Array.Sort (ctors, MemberReferenceComparer.Default);
				members.Add (new ConstructorData (document, nclass, ctors));
			}

			PropertyDefinition[] properties = GetProperties (type);
			if (properties.Length > 0) {
				Array.Sort (properties, MemberReferenceComparer.Default);
				members.Add (new PropertyData (document, nclass, properties));
			}

			EventDefinition [] events = GetEvents (type);
			if (events.Length > 0) {
				Array.Sort (events, MemberReferenceComparer.Default);
				members.Add (new EventData (document, nclass, events));
			}

			MethodDefinition [] methods = GetMethods (type);
			if (methods.Length > 0) {
				Array.Sort (methods, MemberReferenceComparer.Default);
				members.Add (new MethodData (document, nclass, methods));
			}

			foreach (MemberData md in members)
				md.DoOutput ();

			NestedTypeCollection nested = type.NestedTypes;
			//remove non public(familiy) and nested in second degree
			for (int i = nested.Count - 1; i >= 0; i--) {
				TypeDefinition t = nested [i];
				if ((t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic ||
					(t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamily ||
					(t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamORAssem) {
					// public
					if (t.DeclaringType == type)
						continue; // not nested of nested
				}

				nested.RemoveAt (i);
			}


			if (nested.Count > 0) {
				XmlNode classes = document.CreateElement ("classes", null);
				nclass.AppendChild (classes);
				foreach (TypeDefinition t in nested) {
					TypeData td = new TypeData (document, classes, t);
					td.DoOutput ();
				}
			}
		}
Exemple #2
0
        public override void DoOutput()
        {
            if (document == null)
            {
                throw new InvalidOperationException("Document not set");
            }

            XmlNode nclass = document.CreateElement("class", null);

            AddAttribute(nclass, "name", type.Name);
            string classType = GetClassType(type);

            AddAttribute(nclass, "type", classType);

            if (type.BaseType != null)
            {
                AddAttribute(nclass, "base", Utils.CleanupTypeName(type.BaseType));
            }

            if (type.IsSealed)
            {
                AddAttribute(nclass, "sealed", "true");
            }

            if (type.IsAbstract)
            {
                AddAttribute(nclass, "abstract", "true");
            }

            if ((type.Attributes & TypeAttributes.Serializable) != 0 || type.IsEnum)
            {
                AddAttribute(nclass, "serializable", "true");
            }

            string charSet = GetCharSet(type);

            AddAttribute(nclass, "charset", charSet);

            string layout = GetLayout(type);

            if (layout != null)
            {
                AddAttribute(nclass, "layout", layout);
            }

            parent.AppendChild(nclass);

            AttributeData.OutputAttributes(document, nclass, GetCustomAttributes(type));

            XmlNode ifaces = null;

            foreach (TypeReference iface in  TypeHelper.GetInterfaces(type))
            {
                if (!TypeHelper.IsPublic(iface))
                {
                    // we're only interested in public interfaces
                    continue;
                }

                if (ifaces == null)
                {
                    ifaces = document.CreateElement("interfaces", null);
                    nclass.AppendChild(ifaces);
                }

                XmlNode iface_node = document.CreateElement("interface", null);
                AddAttribute(iface_node, "name", Utils.CleanupTypeName(iface));
                ifaces.AppendChild(iface_node);
            }

            MemberData.OutputGenericParameters(document, nclass, type);

            ArrayList members = new ArrayList();

            FieldDefinition [] fields = GetFields(type);
            if (fields.Length > 0)
            {
                Array.Sort(fields, MemberReferenceComparer.Default);
                FieldData fd = new FieldData(document, nclass, fields);
                members.Add(fd);
            }

            if (type.IsEnum)
            {
                var value_type = GetEnumValueField(type);
                if (value_type == null)
                {
                    throw new NotSupportedException();
                }

                AddAttribute(nclass, "enumtype", Utils.CleanupTypeName(value_type.FieldType));
            }

            MethodDefinition [] ctors = GetConstructors(type);
            if (ctors.Length > 0)
            {
                Array.Sort(ctors, MemberReferenceComparer.Default);
                members.Add(new ConstructorData(document, nclass, ctors));
            }

            PropertyDefinition[] properties = GetProperties(type);
            if (properties.Length > 0)
            {
                Array.Sort(properties, MemberReferenceComparer.Default);
                members.Add(new PropertyData(document, nclass, properties));
            }

            EventDefinition [] events = GetEvents(type);
            if (events.Length > 0)
            {
                Array.Sort(events, MemberReferenceComparer.Default);
                members.Add(new EventData(document, nclass, events));
            }

            MethodDefinition [] methods = GetMethods(type);
            if (methods.Length > 0)
            {
                Array.Sort(methods, MemberReferenceComparer.Default);
                members.Add(new MethodData(document, nclass, methods));
            }

            foreach (MemberData md in members)
            {
                md.DoOutput();
            }

            NestedTypeCollection nested = type.NestedTypes;

            //remove non public(familiy) and nested in second degree
            for (int i = nested.Count - 1; i >= 0; i--)
            {
                TypeDefinition t = nested [i];
                if ((t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedPublic ||
                    (t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamily ||
                    (t.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.NestedFamORAssem)
                {
                    // public
                    if (t.DeclaringType == type)
                    {
                        continue;                         // not nested of nested
                    }
                }

                nested.RemoveAt(i);
            }


            if (nested.Count > 0)
            {
                XmlNode classes = document.CreateElement("classes", null);
                nclass.AppendChild(classes);
                foreach (TypeDefinition t in nested)
                {
                    TypeData td = new TypeData(document, classes, t);
                    td.DoOutput();
                }
            }
        }
Exemple #3
0
		public override void DoOutput ()
		{
			if (document == null)
				throw new InvalidOperationException ("Document not set");

			XmlNode nassembly = document.CreateElement ("assembly", null);
			AssemblyNameDefinition aname = ass.Name;
			AddAttribute (nassembly, "name", aname.Name);
			AddAttribute (nassembly, "version", aname.Version.ToString ());
			parent.AppendChild (nassembly);
			TypeForwardedToData.OutputForwarders (document, nassembly, ass);
			AttributeData.OutputAttributes (document, nassembly, ass.CustomAttributes);
			TypeDefinitionCollection typesCollection = ass.MainModule.Types;
			if (typesCollection == null || typesCollection.Count == 0)
				return;
			object [] typesArray = new object [typesCollection.Count];
			for (int i = 0; i < typesCollection.Count; i++) {
				typesArray [i] = typesCollection [i];
			}
			Array.Sort (typesArray, TypeReferenceComparer.Default);

			XmlNode nss = document.CreateElement ("namespaces", null);
			nassembly.AppendChild (nss);

			string current_namespace = "$%&$&";
			XmlNode ns = null;
			XmlNode classes = null;
			foreach (TypeDefinition t in typesArray) {
				if (string.IsNullOrEmpty (t.Namespace))
					continue;

				if ((t.Attributes & TypeAttributes.VisibilityMask) != TypeAttributes.Public)
					continue;

				if (t.DeclaringType != null)
					continue; // enforce !nested

				if (t.Namespace != current_namespace) {
					current_namespace = t.Namespace;
					ns = document.CreateElement ("namespace", null);
					AddAttribute (ns, "name", current_namespace);
					nss.AppendChild (ns);
					classes = document.CreateElement ("classes", null);
					ns.AppendChild (classes);
				}

				TypeData bd = new TypeData (document, classes, t);
				bd.DoOutput ();
			}
		}
Exemple #4
0
        public override void DoOutput()
        {
            if (document == null)
            {
                throw new InvalidOperationException("Document not set");
            }

            XmlNode nassembly            = document.CreateElement("assembly", null);
            AssemblyNameDefinition aname = ass.Name;

            AddAttribute(nassembly, "name", aname.Name);
            AddAttribute(nassembly, "version", aname.Version.ToString());
            parent.AppendChild(nassembly);
            AttributeData.OutputAttributes(document, nassembly, ass.CustomAttributes);
            TypeDefinitionCollection typesCollection = ass.MainModule.Types;

            if (typesCollection == null || typesCollection.Count == 0)
            {
                return;
            }
            object [] typesArray = new object [typesCollection.Count];
            for (int i = 0; i < typesCollection.Count; i++)
            {
                typesArray [i] = typesCollection [i];
            }
            Array.Sort(typesArray, TypeReferenceComparer.Default);

            XmlNode nss = document.CreateElement("namespaces", null);

            nassembly.AppendChild(nss);

            string  current_namespace = "$%&$&";
            XmlNode ns      = null;
            XmlNode classes = null;

            foreach (TypeDefinition t in typesArray)
            {
                if (string.IsNullOrEmpty(t.Namespace))
                {
                    continue;
                }

                if ((t.Attributes & TypeAttributes.VisibilityMask) != TypeAttributes.Public)
                {
                    continue;
                }

                if (t.DeclaringType != null)
                {
                    continue;                     // enforce !nested
                }
                if (t.Namespace != current_namespace)
                {
                    current_namespace = t.Namespace;
                    ns = document.CreateElement("namespace", null);
                    AddAttribute(ns, "name", current_namespace);
                    nss.AppendChild(ns);
                    classes = document.CreateElement("classes", null);
                    ns.AppendChild(classes);
                }

                TypeData bd = new TypeData(document, classes, t);
                bd.DoOutput();
            }
        }