[runtime] Disable some tests in full-aot mode which cannot be AOTed because of type...
[mono.git] / mcs / tools / mdoc / Mono.Documentation / monodocs2slashdoc.cs
index d4528418d7e898fe686820847f1927c9918b2e8c..b818401eca1644e5845841dffac17d22bb4bdeb6 100644 (file)
@@ -6,6 +6,7 @@ using System.Text;
 using System.Text.RegularExpressions;
 using System.Xml;
 
+using Monodoc;
 using Mono.Options;
 
 namespace Mono.Documentation {
@@ -118,31 +119,10 @@ public class MDocToMSXDocConverter : MDocCommand {
                                XmlElement members = outputfiles [assemblyname];
                                if (members == null) continue; // assembly is strangely not listed in the index
                                
-                               string typeName = XmlDocUtils.ToEscapedTypeName (type.SelectSingleNode("Type/@FullName").InnerText);
-                               CreateMember("T:" + typeName, type.DocumentElement, members);
+                               CreateMember (GetCref (type.DocumentElement), type.DocumentElement, members);
                                        
                                foreach (XmlElement memberdoc in type.SelectNodes("Type/Members/Member")) {
-                                       string name = typeName;
-                                       switch (memberdoc.SelectSingleNode("MemberType").InnerText) {
-                                               case "Constructor":
-                                                       name = "C:" + name + MakeArgs(memberdoc);
-                                                       break;
-                                               case "Method":
-                                                       name = "M:" + name + "." + XmlDocUtils.ToEscapedMemberName (memberdoc.GetAttribute("MemberName")) + MakeArgs(memberdoc);
-                                                       if (memberdoc.GetAttribute("MemberName") == "op_Implicit" || memberdoc.GetAttribute("MemberName") == "op_Explicit")
-                                                               name += "~" + XmlDocUtils.ToTypeName (memberdoc.SelectSingleNode("ReturnValue/ReturnType").InnerText, memberdoc);
-                                                       break;
-                                               case "Property":
-                                                       name = "P:" + name + "." + XmlDocUtils.ToEscapedMemberName (memberdoc.GetAttribute("MemberName")) + MakeArgs(memberdoc);
-                                                       break;
-                                               case "Field":
-                                                       name = "F:" + name + "." + XmlDocUtils.ToEscapedMemberName (memberdoc.GetAttribute("MemberName"));
-                                                       break;
-                                               case "Event":
-                                                       name = "E:" + name + "." + XmlDocUtils.ToEscapedMemberName (memberdoc.GetAttribute("MemberName"));
-                                                       break;
-                                       }
-                                       
+                                       string name = GetCref (memberdoc);
                                        CreateMember(name, memberdoc, members);
                                }
                        }
@@ -151,30 +131,34 @@ public class MDocToMSXDocConverter : MDocCommand {
                        AddNamespaceSummary(nsSummaries, basepath, nsnode.GetAttribute("Name"));
                }
        }
-       
-       private static void AddNamespaceSummary(XmlDocument nsSummaries, string basepath, string currentNs) {
-               string filename = Path.Combine(basepath, currentNs + ".xml");
-               if (File.Exists(filename))      {
-                       XmlDocument nsSummary = new XmlDocument();
-                       nsSummary.Load(filename);
-                       XmlElement ns = nsSummaries.CreateElement("namespace");
-                       nsSummaries.DocumentElement.AppendChild(ns);
-                       ns.SetAttribute("name", currentNs);
-                       ns.InnerText = nsSummary.SelectSingleNode("/Namespace/Docs/summary").InnerText;
+
+       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.");
                }
        }
-       
-       private static void CreateMember(string name, XmlElement input, XmlElement output) {
-               XmlElement member = output.OwnerDocument.CreateElement("member");
-               output.AppendChild(member);
-               
-               member.SetAttribute("name", name);
-               
-               foreach (XmlNode docnode in input.SelectSingleNode("Docs"))
-                       member.AppendChild(output.OwnerDocument.ImportNode(docnode, true));
-       }
-       
-       private static string MakeArgs (XmlElement member)
+
+       static string MakeArgs (XmlElement member)
        {
                XmlNodeList parameters = member.SelectNodes ("Parameters/Parameter");
                if (parameters.Count == 0)
@@ -189,6 +173,31 @@ public class MDocToMSXDocConverter : MDocCommand {
                args.Append (")");
                return args.ToString ();
        }
+       
+       private static void AddNamespaceSummary(XmlDocument nsSummaries, string basepath, string currentNs) {
+               foreach (var filename in new [] {
+                               Path.Combine(basepath, currentNs + ".xml"),
+                               Path.Combine(basepath, "ns-" + currentNs + ".xml")}) {
+                       if (File.Exists(filename))      {
+                               XmlDocument nsSummary = new XmlDocument();
+                               nsSummary.Load(filename);
+                               XmlElement ns = nsSummaries.CreateElement("namespace");
+                               nsSummaries.DocumentElement.AppendChild(ns);
+                               ns.SetAttribute("name", currentNs);
+                               ns.InnerText = nsSummary.SelectSingleNode("/Namespace/Docs/summary").InnerText;
+                       }
+               }
+       }
+       
+       private static void CreateMember(string name, XmlElement input, XmlElement output) {
+               XmlElement member = output.OwnerDocument.CreateElement("member");
+               output.AppendChild(member);
+               
+               member.SetAttribute("name", name);
+               
+               foreach (XmlNode docnode in input.SelectSingleNode("Docs"))
+                       member.AppendChild(output.OwnerDocument.ImportNode(docnode, true));
+       }
 
        private static void WriteXml(XmlElement element, System.IO.TextWriter output) {
                XmlTextWriter writer = new XmlTextWriter(output);