static void ReadClassDefinition(WrapperProject project, XmlReader reader, HeaderDefinition header, ClassDefinition parent = null) { string className = reader.GetAttribute("Name"); ClassDefinition @class; string classType = reader.Name; switch (classType) { case "Class": @class = new ClassDefinition(className, header, parent); break; case "ClassTemplate": @class = new ClassTemplateDefinition(className, header, parent); break; case "Enum": @class = new EnumDefinition(className, header, parent); break; default: throw new NotImplementedException(); } string namespaceName = reader.GetAttribute("Namespace"); if (namespaceName != null) { @class.NamespaceName = namespaceName; } if ("true".Equals(reader.GetAttribute("IsExcluded"))) { @class.IsExcluded = true; } if ("true".Equals(reader.GetAttribute("HasPreventDelete"))) { @class.HasPreventDelete = true; } project.ClassDefinitions.Add(@class.FullyQualifiedName, @class); if (reader.IsEmptyElement) { return; } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Class": case "ClassTemplate": case "Enum": { ReadClassDefinition(project, reader, header, @class); } break; case "Method": { ReadMethodDefinition(reader, @class); } break; } } else if (reader.NodeType == XmlNodeType.EndElement) { break; } } }
static IEnumerable <ClassDefinition> ReadClassDefinition(WrapperProject project, XmlReader reader, HeaderDefinition header, ClassDefinition parent = null) { string className = reader.GetAttribute("Name"); ClassDefinition @class; string classType = reader.Name; switch (classType) { case "Class": @class = new ClassDefinition(className, header, parent); break; case "ClassTemplate": @class = new ClassTemplateDefinition(className, header, parent); break; case "Enum": @class = new EnumDefinition(className, header, parent); break; default: throw new NotImplementedException(); } string namespaceName = reader.GetAttribute("Namespace"); if (namespaceName != null) { @class.NamespaceName = namespaceName; } if ("true".Equals(reader.GetAttribute("IsExcluded"))) { @class.IsExcluded = true; } if ("true".Equals(reader.GetAttribute("HasPreventDelete"))) { @class.HasPreventDelete = true; } if ("true".Equals(reader.GetAttribute("MarshalAsStruct"))) { @class.MarshalAsStruct = true; } if (reader.IsEmptyElement) { yield return(@class); yield break; } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Class": case "ClassTemplate": case "Enum": var classes = ReadClassDefinition(project, reader, header, @class); foreach (var c in classes) { yield return(c); } break; case "Method": ReadMethodDefinition(reader, @class); break; case "TemplateParameter": (@class as ClassTemplateDefinition).TemplateParameters .Add(reader.ReadElementContentAsString()); break; } } else if (reader.NodeType == XmlNodeType.EndElement) { break; } } yield return(@class); }
static void ReadClassDefinition(WrapperProject project, XmlReader reader, HeaderDefinition header, ClassDefinition parent = null) { string className = reader.GetAttribute("Name"); ClassDefinition @class; string classType = reader.Name; switch (classType) { case "ClassDefinition": @class = new ClassDefinition(className, header, parent); break; case "ClassTemplateDefinition": @class = new ClassTemplateDefinition(className, header, parent); break; case "EnumDefinition": @class = new EnumDefinition(className, header, parent); break; default: throw new NotImplementedException(); } string namespaceName = reader.GetAttribute("Namespace"); if (namespaceName != null) { @class.NamespaceName = namespaceName; } string isExcluded = reader.GetAttribute("IsExcluded"); if ("true".Equals(isExcluded)) { @class.IsExcluded = true; } project.ClassDefinitions.Add(@class.FullyQualifiedName, @class); if (reader.IsEmptyElement) { return; } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "ClassDefinition": case "ClassTemplateDefinition": case "EnumDefinition": { ReadClassDefinition(project, reader, header, @class); } break; } } else if (reader.NodeType == XmlNodeType.EndElement) { break; } } }
static IEnumerable<ClassDefinition> ReadClassDefinition(WrapperProject project, XmlReader reader, HeaderDefinition header, ClassDefinition parent = null) { string className = reader.GetAttribute("Name"); ClassDefinition @class; string classType = reader.Name; switch (classType) { case "Class": @class = new ClassDefinition(className, header, parent); break; case "ClassTemplate": @class = new ClassTemplateDefinition(className, header, parent); break; case "Enum": @class = new EnumDefinition(className, header, parent); break; default: throw new NotImplementedException(); } string namespaceName = reader.GetAttribute("Namespace"); if (namespaceName != null) { @class.NamespaceName = namespaceName; } if ("true".Equals(reader.GetAttribute("IsExcluded"))) @class.IsExcluded = true; if ("true".Equals(reader.GetAttribute("HasPreventDelete"))) @class.HasPreventDelete = true; if ("true".Equals(reader.GetAttribute("MarshalAsStruct"))) @class.MarshalAsStruct = true; if (reader.IsEmptyElement) { yield return @class; yield break; } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Class": case "ClassTemplate": case "Enum": var classes = ReadClassDefinition(project, reader, header, @class); foreach (var c in classes) { yield return c; } break; case "Method": ReadMethodDefinition(reader, @class); break; case "TemplateParameter": (@class as ClassTemplateDefinition).TemplateParameters .Add(reader.ReadElementContentAsString()); break; } } else if (reader.NodeType == XmlNodeType.EndElement) { break; } } yield return @class; }