Exemple #1
0
		public override string GetDescription (XElement e)
		{
			var sb = new StringBuilder ();

			var attribs = e.Attribute ("attrib");
			if (attribs != null) {
				var attr = (MethodAttributes) Int32.Parse (attribs.Value);
				if ((attr & MethodAttributes.Public) != MethodAttributes.Public) {
					sb.Append ("protected ");
				} else {
					sb.Append ("public ");
				}

				if ((attr & MethodAttributes.Static) != 0) {
					sb.Append ("static ");
				} else if ((attr & MethodAttributes.Virtual) != 0) {
					if ((attr & MethodAttributes.VtableLayoutMask) == 0)
						sb.Append ("override ");
					else
						sb.Append ("virtual ");
				}
			}

			string name = e.GetAttribute ("name");

			var r = e.GetTypeName ("returntype");
			if (r != null) {
				// ctor dont' have a return type
				sb.Append (r).Append (' ');
			} else {
				// show the constructor as it would be defined in C#
				name = name.Replace (".ctor", State.Type);
			}

			// the XML file `name` does not contain parameter names, so we must process them ourselves
			// which gives us the opportunity to simplify type names
			sb.Append (name.Substring (0, name.IndexOf ('(')));

			var genericp = e.Element ("generic-parameters");
			if (genericp != null) {
				var list = new List<string> ();
				foreach (var p in genericp.Elements ("generic-parameter")) {
					list.Add (p.GetTypeName ("name"));
				}
				sb.Append ("&lt;").Append (String.Join (", ", list)).Append ("&gt;");
			}

			sb.Append (" (");
			var parameters = e.Element ("parameters");
			if (parameters != null) {
				var list = new List<string> ();
				foreach (var p in parameters.Elements ("parameter")) {
					list.Add (p.GetTypeName ("type") + " " + p.GetAttribute ("name"));
				}
				sb.Append (String.Join (", ", list));
			}
			sb.Append (");");

			return sb.ToString ();
		}
Exemple #2
0
		public override string GetDescription (XElement e)
		{
			StringBuilder sb = new StringBuilder ();
			// TODO: attribs
			sb.Append ("public event ");
			sb.Append (e.GetTypeName ("eventtype")).Append (' ');
			sb.Append (e.GetAttribute ("name")).Append (';');
			return sb.ToString ();
		}
		void RenderReturnType (XElement source, XElement target, ApiChange change)
		{
			var srcType = source.GetTypeName ("returntype");
			var tgtType = target.GetTypeName ("returntype");

			if (srcType != tgtType) {
				change.AppendModified (srcType, tgtType, true);
				change.Append (" ");
			} else if (srcType != null) {
				// ctor don't have a return type
				change.Append (srcType);
				change.Append (" ");
			}
		}
Exemple #4
0
		public override string GetDescription (XElement e)
		{
			string name = e.Attribute ("name").Value;
			string ptype = e.GetTypeName ("ptype");

			bool virt = false;
			bool over = false;
			bool stat = false;
			bool getter = false;
			bool setter = false;
			bool family = false;
			var methods = e.Element ("methods");
			if (methods != null) {
				foreach (var m in methods.Elements ("method")) {
					virt |= m.IsTrue ("virtual");
					stat |= m.IsTrue ("static");
					var n = m.GetAttribute ("name");
					getter |= n.StartsWith ("get_", StringComparison.Ordinal);
					setter |= n.StartsWith ("set_", StringComparison.Ordinal);
					var attribs = (MethodAttributes) Int32.Parse (m.GetAttribute ("attrib"));
					family = ((attribs & MethodAttributes.Public) != MethodAttributes.Public);
					over |= (attribs & MethodAttributes.VtableLayoutMask) == 0;
				}
			}

			var sb = GetObsoleteMessage (e);
			bool obsolete = sb.Length > 0;

			sb.Append (family ? "protected " : "public ");
			if (virt)
				sb.Append (over ? "override " : "virtual ");
			else if (stat)
				sb.Append ("static ");
			sb.Append (ptype).Append (' ').Append (name).Append (" { ");
			if (getter)
				sb.Append ("get; ");
			if (setter)
				sb.Append ("set; ");
			sb.Append ("}");

			if (obsolete)
				sb.AppendLine (); // more readable output
			return sb.ToString ();
		}
Exemple #5
0
		public override string GetDescription (XElement e)
		{
			var sb = GetObsoleteMessage (e);
			bool obsolete = sb.Length > 0;

			string name = e.GetAttribute ("name");
			string value = e.GetAttribute ("value");

			if (State.BaseType == "System.Enum") {
				sb.Append (name).Append (" = ").Append (value).Append (',');
			} else {
				var attribs = e.Attribute ("attrib");
				if (attribs != null) {
					var attr = (FieldAttributes)Int32.Parse (attribs.Value);
					if ((attr & FieldAttributes.Public) != FieldAttributes.Public) {
						sb.Append ("protected ");
					} else {
						sb.Append ("public ");
					}

					if ((attr & FieldAttributes.Static) != 0)
						sb.Append ("static ");

					if ((attr & FieldAttributes.Literal) != 0)
						sb.Append ("const ");
				}

				string ftype = e.GetTypeName ("fieldtype");
				sb.Append (ftype).Append (' ');
				sb.Append (name);
				if (ftype == "string" && e.Attribute ("value") != null) {
					if (value == null)
						sb.Append (" = null");
					else
						sb.Append (" = \"").Append (value).Append ('"');
				}
				sb.Append (';');
			}

			if (obsolete)
				sb.AppendLine (); // more readable output
			return sb.ToString ();
		}
Exemple #6
0
		public override bool Equals (XElement source, XElement target, ApiChanges changes)
		{
			if (base.Equals (source, target, changes))
				return true;

			var change = new ApiChange ();
			change.Header = "Modified " + GroupName;
			change.Append ("public event ");

			var srcEventType = source.GetTypeName ("eventtype");
			var tgtEventType = target.GetTypeName ("eventtype");

			if (srcEventType != tgtEventType) {
				change.AppendModified (srcEventType, tgtEventType, true);
			} else {
				change.Append (srcEventType);
			}
			change.Append (" ");
			change.Append (source.GetAttribute ("name")).Append (";");
			return false;
		}
Exemple #7
0
		public override string GetDescription (XElement e)
		{
			var sb = new StringBuilder ();

			string name = e.GetAttribute ("name");
			string value = e.GetAttribute ("value");

			if (State.BaseType == "System.Enum") {
				sb.Append (name).Append (" = ").Append (value).Append (',');
			} else {
				var attribs = e.Attribute ("attrib");
				if (attribs != null) {
					var attr = (FieldAttributes)Int32.Parse (attribs.Value);
					if ((attr & FieldAttributes.Public) != FieldAttributes.Public) {
						sb.Append ("protected ");
					} else {
						sb.Append ("public ");
					}

					if ((attr & FieldAttributes.Static) != 0)
						sb.Append ("static ");

					if ((attr & FieldAttributes.Literal) != 0)
						sb.Append ("const ");
				}

				string ftype = e.GetTypeName ("fieldtype");
				sb.Append (ftype).Append (' ');
				sb.Append (name);
				if (ftype == "string" && e.Attribute ("value") != null) {
					if (value == null)
						sb.Append (" = null");
					else
						sb.Append (" = \"").Append (value).Append ('"');
				}
				sb.Append (';');
			}

			return sb.ToString ();
		}
Exemple #8
0
        static void OutputMethodSummary(XElement member)
        {
            var fileName = member.GetFileName();
            var paths = new List<string>();
            var currentDirectory = Directory.GetCurrentDirectory();
            paths.Add(currentDirectory);

            var name = member.GetName();
            var fullName = member.GetFullName();

            var typeName = member.GetTypeName();
            var type = _assembly.GetType(typeName);

            if (type != null)
            {
                if (_baseTypesWithImplementations.ContainsKey(type))
                {
                    foreach (var path in _baseTypesWithImplementations[type])
                        paths.Add(path);
                }
            }

            var summary = member.GetSummary();
            var description = summary.GetDescription();
            var parameters = member.GetParameters();

            var builder = new StringBuilder();
            builder.AppendFormat("**{0}**\n",name);
            builder.AppendLine();
            builder.AppendLine(description);
            builder.AppendLine();

            if (parameters.Count() > 0)
            {
                builder.AppendLine("#Parameters#");
                builder.AppendLine();
                foreach (var parameter in parameters)
                {
                    builder.AppendFormat("\n##{0}##\n", parameter.GetParameterName());
                    builder.AppendLine(parameter.GetDescription());
                }
            }

            foreach (var path in paths)
            {
                Directory.SetCurrentDirectory(path);

                var writer = File.CreateText(fileName);
                writer.Write(builder.ToString());
                writer.Close();

                builder = new StringBuilder();
                builder.AppendLine();
                builder.AppendLine();
                if (!_methodsOutputted.ContainsKey(path))
                {
                    builder.AppendLine("**Methods**\n");
                    _methodsOutputted[path] = true;
                }
                builder.AppendFormat("[{0}]({1})\n", name, fullName);
                var dir = new DirectoryInfo(path);
                var typeSummaryFileName = Path.Combine(dir.FullName, string.Format("{0}.md", dir.Name));
                File.AppendAllText(typeSummaryFileName, builder.ToString());
            }

            Directory.SetCurrentDirectory(currentDirectory);
        }
Exemple #9
0
		string RenderGenericParameter (XElement gp)
		{
			var sb = new StringBuilder ();
			sb.Append (gp.GetTypeName ("name"));

			var constraints = gp.DescendantList ("generic-parameter-constraints", "generic-parameter-constraint");
			if (constraints != null && constraints.Count > 0) {
				sb.Append (" : ");
				for (int i = 0; i < constraints.Count; i++) {
					if (i > 0)
						sb.Append (", ");
					sb.Append (constraints [i].GetTypeName ("name"));
				}
			}
			return sb.ToString ();
		}
Exemple #10
0
		public override string GetDescription (XElement e)
		{
			return e.GetTypeName ("name");
		}
Exemple #11
0
		public override bool Equals (XElement source, XElement target, ApiChanges changes)
		{
			if (base.Equals (source, target, changes))
				return true;

			var name = source.GetAttribute ("name");
			var srcValue = source.GetAttribute ("value");
			var tgtValue = target.GetAttribute ("value");
			var change = new ApiChange ();
			change.Header = "Modified " + GroupName;

			if (State.BaseType == "System.Enum") {
				change.Append (name).Append (" = ");
				if (srcValue != tgtValue) {
					change.AppendModified (srcValue, tgtValue, true);
				} else {
					change.Append (srcValue);
				}
			} else {
				RenderFieldAttributes (source.GetFieldAttributes (), target.GetFieldAttributes (), change);

				var srcType = source.GetTypeName ("fieldtype");
				var tgtType = target.GetTypeName ("fieldtype");

				if (srcType != tgtType) {
					change.AppendModified (srcType, tgtType, true);
				} else {
					change.Append (srcType);
				}
				change.Append (" ");
				change.Append (name);

				if (srcType == "string" && srcValue != null)
					srcValue = "\"" + srcValue + "\"";

				if (tgtType == "string" && tgtValue != null)
					tgtValue = "\"" + tgtValue + "\"";

				if (srcValue != tgtValue) {
					change.Append (" = ");
					if (srcValue == null)
						srcValue = "null";
					if (tgtValue == null)
						tgtValue = "null";
					change.AppendModified (srcValue, tgtValue, true);
				} else if (srcValue != null) {
					change.Append (" = ");
					change.Append (srcValue);
				}
				change.Append (";");
			}

			changes.Add (source, target, change);

			return false;
		}
Exemple #12
0
		void RenderPropertyType (XElement source, XElement target, ApiChange change)
		{
			var srcType = source.GetTypeName ("ptype");
			var tgtType = target.GetTypeName ("ptype");

			if (srcType == tgtType) {
				change.Append (tgtType);
			} else {
				change.AppendModified (srcType, tgtType, true);
			}
			change.Append (" ");
		}
Exemple #13
0
		public override string GetDescription (XElement e)
		{
			string name = e.Attribute ("name").Value;
			string ptype = e.GetTypeName ("ptype");

			bool virt = false;
			bool over = false;
			bool stat = false;
			bool getter = false;
			bool setter = false;
			bool family = false;
			GetProperties (e, out virt, out over, out stat, out getter, out setter, out family);

			var sb = new StringBuilder ();

			sb.Append (family ? "protected " : "public ");
			if (virt && !State.IgnoreVirtualChanges)
				sb.Append (over ? "override " : "virtual ");
			else if (stat)
				sb.Append ("static ");
			sb.Append (ptype).Append (' ').Append (name).Append (" { ");
			if (getter)
				sb.Append ("get; ");
			if (setter)
				sb.Append ("set; ");
			sb.Append ("}");

			return sb.ToString ();
		}