XmlElement members = outputfiles [assemblyname];
if (members == null) continue; // assembly is strangely not listed in the index
- //CreateMember(EcmaDoc.GetCref (type.DocumentElement), type.DocumentElement, members);
+ CreateMember (GetCref (type.DocumentElement), type.DocumentElement, members);
foreach (XmlElement memberdoc in type.SelectNodes("Type/Members/Member")) {
- //string name = EcmaDoc.GetCref (memberdoc);
- // FIXME
- string name = ns + "." + typename + "." + memberdoc.GetAttribute ("MemberName");
+ string name = GetCref (memberdoc);
CreateMember(name, memberdoc, members);
}
}
AddNamespaceSummary(nsSummaries, basepath, nsnode.GetAttribute("Name"));
}
}
+
+ static string GetCref (XmlElement member)
+ {
+ string typeName = XmlDocUtils.ToEscapedTypeName (member.SelectSingleNode("/Type/@FullName").InnerText);
+ if (member.Name == "Type")
+ return "T:" + typeName;
+ string memberType = member.SelectSingleNode("MemberType").InnerText;
+ switch (memberType) {
+ case "Constructor":
+ return "C:" + typeName + MakeArgs(member);
+ case "Event":
+ return "E:" + typeName + "." + XmlDocUtils.ToEscapedMemberName (member.GetAttribute("MemberName"));
+ case "Field":
+ return "F:" + typeName + "." + XmlDocUtils.ToEscapedMemberName (member.GetAttribute("MemberName"));
+ case "Method": {
+ string name = "M:" + typeName + "." + XmlDocUtils.ToEscapedMemberName (member.GetAttribute("MemberName")) + MakeArgs(member);
+ if (member.GetAttribute("MemberName") == "op_Implicit" || member.GetAttribute("MemberName") == "op_Explicit")
+ name += "~" + XmlDocUtils.ToTypeName (member.SelectSingleNode("ReturnValue/ReturnType").InnerText, member);
+ return name;
+ }
+ case "Property":
+ return "P:" + typeName + "." + XmlDocUtils.ToEscapedMemberName (member.GetAttribute("MemberName")) + MakeArgs(member);
+ default:
+ throw new NotSupportedException ("MemberType '" + memberType + "' is not supported.");
+ }
+ }
+
+ static string MakeArgs (XmlElement member)
+ {
+ XmlNodeList parameters = member.SelectNodes ("Parameters/Parameter");
+ if (parameters.Count == 0)
+ return "";
+ StringBuilder args = new StringBuilder ();
+ args.Append ("(");
+ args.Append (XmlDocUtils.ToTypeName (parameters [0].Attributes ["Type"].Value, member));
+ for (int i = 1; i < parameters.Count; ++i) {
+ args.Append (",");
+ args.Append (XmlDocUtils.ToTypeName (parameters [i].Attributes ["Type"].Value, member));
+ }
+ args.Append (")");
+ return args.ToString ();
+ }
private static void AddNamespaceSummary(XmlDocument nsSummaries, string basepath, string currentNs) {
foreach (var filename in new [] {