internal void CreateServicesMembers() { CodeMethodInvokeExpression callClone; CodeExpression[] codeCastExpression; string innerType = this.InnerType; string clrTypeName = this.clrTypeInfo.clrtypeName; bool useAutoTyping = (this.clrTypeInfo.IsAbstract ? true : this.clrTypeInfo.IsSubstitutionHead); if (this.clrTypeInfo.typeOrigin == SchemaOrigin.Element) { CodeTypeMember load = CodeDomHelper.CreateStaticMethod("Load", clrTypeName, innerType, "xmlFile", "System.String", useAutoTyping); CodeTypeMember loadReader = CodeDomHelper.CreateStaticMethod("Load", clrTypeName, innerType, "xmlFile", "System.IO.TextReader", useAutoTyping); CodeTypeMember parse = CodeDomHelper.CreateStaticMethod("Parse", clrTypeName, innerType, "xml", "System.String", useAutoTyping); if (!this.clrTypeInfo.IsDerived) { this.decl.Members.Add(CodeDomHelper.CreateSave("xmlFile", "System.String")); this.decl.Members.Add(CodeDomHelper.CreateSave("tw", "System.IO.TextWriter")); this.decl.Members.Add(CodeDomHelper.CreateSave("xmlWriter", "System.Xml.XmlWriter")); } else { CodeTypeMember attributes = load; attributes.Attributes = attributes.Attributes | MemberAttributes.New; CodeTypeMember codeTypeMember = parse; codeTypeMember.Attributes = codeTypeMember.Attributes | MemberAttributes.New; } this.decl.Members.Add(load); this.decl.Members.Add(loadReader); this.decl.Members.Add(parse); } CodeTypeMember cast = CodeDomHelper.CreateCast(clrTypeName, innerType, useAutoTyping); this.decl.Members.Add(cast); if (!this.clrTypeInfo.IsAbstract) { CodeMemberMethod clone = CodeDomHelper.CreateMethod("Clone", MemberAttributes.Override | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public, new CodeTypeReference("XTypedElement")); if (innerType != null) { callClone = CodeDomHelper.CreateMethodCall(new CodePropertyReferenceExpression(CodeDomHelper.This(), "Content"), "Clone", new CodeExpression[0]); CodeStatementCollection statements = clone.Statements; codeCastExpression = new CodeExpression[] { new CodeCastExpression(new CodeTypeReference(innerType), callClone) }; statements.Add(new CodeMethodReturnStatement(new CodeObjectCreateExpression(clrTypeName, codeCastExpression))); } else { CodeTypeReferenceExpression codeTypeReferenceExpression = new CodeTypeReferenceExpression("XTypedServices"); string str = string.Concat("CloneXTypedElement<", clrTypeName, ">"); codeCastExpression = new CodeExpression[] { new CodeThisReferenceExpression() }; callClone = CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression, str, codeCastExpression); clone.Statements.Add(new CodeMethodReturnStatement(callClone)); } this.decl.Members.Add(clone); } }