void PopulateClass (Tree tree, string ns, Node ns_node, string file)
{
XmlDocument doc = new XmlDocument ();
doc.Load (file);
string name = EcmaDoc.GetClassName (doc);
string assembly = EcmaDoc.GetClassAssembly (doc);
string kind = EcmaDoc.GetTypeKind (doc);
string full = EcmaDoc.GetFullClassName (doc);
Node class_node;
string file_code = ns_node.tree.HelpSource.PackFile (file);
XmlNode class_summary = detached.ImportNode (doc.SelectSingleNode ("/Type/Docs/summary"), true);
ArrayList l = (ArrayList) class_summaries [ns];
if (l == null){
l = new ArrayList ();
class_summaries [ns] = (object) l;
}
l.Add (new TypeInfo (kind, assembly, full, name, class_summary));
class_node = ns_node.LookupNode (String.Format ("{0} {1}", name, kind), "ecma:" + file_code + "#" + name + "/");
if (kind == "Delegate") {
if (doc.SelectSingleNode("/Type/ReturnValue") == null)
tree.HelpSource.Message (TraceLevel.Error, "Delegate " + name + " does not have a ReturnValue node. See the ECMA-style updates.");
}
if (kind == "Enumeration")
return;
if (kind == "Delegate")
return;
//
// Always add the Members node
//
class_node.CreateNode ("Members", "*");
PopulateMember (doc, name, class_node, "Constructor", "Constructors");
PopulateMember (doc, name, class_node, "Method", "Methods");
PopulateMember (doc, name, class_node, "Property", "Properties");
PopulateMember (doc, name, class_node, "Field", "Fields");
PopulateMember (doc, name, class_node, "Event", "Events");
PopulateMember (doc, name, class_node, "Operator", "Operators");
}