public override void GenerateConstructorCode(ClrBasePropertyInfo property) { if (flatChoice && !hasDuplicateType && property.ContentType != ContentType.WildCardProperty) { ClrBasePropertyInfo prevProperty = null; string propertyReturnType = property.ClrTypeName; if (propertyTypeNameTable.TryGetValue(propertyReturnType, out prevProperty)) { hasDuplicateType = true; return; } else { propertyTypeNameTable.Add(propertyReturnType, property); } if (choiceConstructors == null) { choiceConstructors = new List <CodeConstructor>(); } CodeConstructor choiceConstructor = CodeDomHelper.CreateConstructor(MemberAttributes.Public); property.AddToConstructor(choiceConstructor); choiceConstructors.Add(choiceConstructor); } }
public static CodeConstructor CreateXRootFunctionalConstructor(string typeName) { CodeConstructor constructor = CodeDomHelper.CreateConstructor(MemberAttributes.Public); constructor.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeName), "root")); CodeStatementCollection statements = constructor.Statements; CodeFieldReferenceExpression codeFieldReferenceExpression = new CodeFieldReferenceExpression(CodeDomHelper.This(), "doc"); CodeExpression[] codePropertyReferenceExpression = new CodeExpression[] { new CodePropertyReferenceExpression(new CodeVariableReferenceExpression("root"), "Untyped") }; statements.Add(new CodeAssignStatement(codeFieldReferenceExpression, new CodeObjectCreateExpression("XDocument", codePropertyReferenceExpression))); constructor.Statements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(CodeDomHelper.This(), "rootObject"), new CodeVariableReferenceExpression("root"))); return(constructor); }
internal override CodeConstructor CreateFunctionalConstructor(List <ClrAnnotation> annotations) { CodeConstructor constructor = CodeDomHelper.CreateConstructor(MemberAttributes.Public); if (this.clrTypeInfo.IsSubstitutionMember()) { constructor.BaseConstructorArgs.Add(new CodePrimitiveExpression(true)); } constructor.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(this.innerTypeName), "content")); CodeStatementCollection statements = constructor.Statements; CodeExpression[] codeVariableReferenceExpression = new CodeExpression[] { new CodeVariableReferenceExpression("content") }; statements.Add(CodeDomHelper.CreateMethodCall(null, "SetInnerType", codeVariableReferenceExpression)); TypeBuilder.ApplyAnnotations(constructor, annotations, null); this.decl.Members.Add(constructor); return(constructor); }
internal override void CreateDefaultConstructor(List <ClrAnnotation> annotations) { CodeMemberField typeField = CodeDomHelper.CreateMemberField(this.memberName, this.innerTypeName, MemberAttributes.Private, false); CodeFieldReferenceExpression fieldRef = CodeDomHelper.CreateFieldReference("this", this.memberName); CodeConstructor emptyConstructor = CodeDomHelper.CreateConstructor(MemberAttributes.Public); if ((this.innerTypeAttributes & TypeAttributes.Abstract) != TypeAttributes.NotPublic) { emptyConstructor.Statements.Add(new CodeThrowExceptionStatement(new CodeObjectCreateExpression("InvalidOperationException", new CodeExpression[0]))); } else { CodeStatementCollection statements = emptyConstructor.Statements; CodeExpression[] codeObjectCreateExpression = new CodeExpression[] { new CodeObjectCreateExpression(typeField.Type, new CodeExpression[0]) }; statements.Add(CodeDomHelper.CreateMethodCall(null, "SetInnerType", codeObjectCreateExpression)); } CodeConstructor dummyConstructor = null; if (this.clrTypeInfo.IsSubstitutionHead) { dummyConstructor = CodeDomHelper.CreateConstructor(MemberAttributes.Family); dummyConstructor.Parameters.Add(new CodeParameterDeclarationExpression("System.Boolean", "setNull")); this.decl.Members.Add(dummyConstructor); } if (this.clrTypeInfo.IsSubstitutionMember()) { emptyConstructor.BaseConstructorArgs.Add(new CodePrimitiveExpression(true)); if (dummyConstructor != null) { dummyConstructor.BaseConstructorArgs.Add(new CodePrimitiveExpression(true)); } } TypeBuilder.ApplyAnnotations(emptyConstructor, annotations, null); this.decl.Members.Add(typeField); this.decl.Members.Add(emptyConstructor); this.decl.Members.Add(this.CreateUntypedProperty(fieldRef)); this.decl.Members.Add(this.InnerTypeProperty()); this.decl.Members.Add(this.SetInnerType()); if (this.clrTypeInfo.IsSubstitutionHead) { this.decl.Members.Add(this.SetSubstitutionMember()); } }
internal override CodeConstructor CreateFunctionalConstructor(List <ClrAnnotation> annotations) { string parameterName = "content"; CodeConstructor constructor = CodeDomHelper.CreateConstructor(MemberAttributes.Public); CodeTypeReference returnType = null; if (!this.isSchemaList) { returnType = new CodeTypeReference(this.simpleTypeName); } else { CodeTypeReference[] codeTypeReference = new CodeTypeReference[] { new CodeTypeReference(this.simpleTypeName) }; returnType = new CodeTypeReference("IList", codeTypeReference); } constructor.Parameters.Add(new CodeParameterDeclarationExpression(returnType, parameterName)); constructor.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(CodeDomHelper.This(), "TypedValue"), new CodeVariableReferenceExpression(parameterName))); TypeBuilder.ApplyAnnotations(constructor, annotations, null); this.decl.Members.Add(constructor); return(constructor); }
public static CodeConstructor CreateXRootFunctionalConstructor(string typeName, GeneratedTypesVisibility visibility = GeneratedTypesVisibility.Public) { CodeConstructor constructor = CodeDomHelper.CreateConstructor(visibility.ToMemberAttribute()); constructor.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeName), "root")); constructor.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression(This(), "doc"), new CodeObjectCreateExpression( "XDocument", new CodePropertyReferenceExpression( new CodeVariableReferenceExpression("root"), Constants.Untyped)))); constructor.Statements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression(This(), "rootObject"), new CodeVariableReferenceExpression("root"))); return(constructor); }
private void CreateXRoot(CodeNamespace codeNamespace, string rootName, List <CodeTypeDeclaration> elements, List <CodeNamespace> namespaces, GeneratedTypesVisibility visibility = GeneratedTypesVisibility.Public) { LocalSymbolTable lst = new LocalSymbolTable(); CodeTypeDeclaration xroot = CodeDomHelper.CreateTypeDeclaration(rootName, null, visibility); //Create Methods CodeMemberField docField = CodeDomHelper.CreateMemberField("doc", "XDocument", false, MemberAttributes.Private); CodeMemberField rootField = CodeDomHelper.CreateMemberField("rootObject", Constants.XTypedElement, false, MemberAttributes.Private); xroot.Members.Add(docField); xroot.Members.Add(rootField); lst.Init(rootName); lst.RegisterMember("doc"); lst.RegisterMember("rootObject"); lst.RegisterMember("Load"); lst.RegisterMember("Parse"); lst.RegisterMember("Save"); lst.RegisterMember("XDocument"); lst.RegisterMember("Root"); // Constructor xroot.Members.Add(CodeDomHelper.CreateConstructor(MemberAttributes.Private)); //Load Methods xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", new string[][] { new string[] { "System.String", "xmlFile" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", new string[][] { new string[] { "System.String", "xmlFile" }, new string[] { "LoadOptions", "options" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", new string[][] { new string[] { "TextReader", "textReader" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", new string[][] { new string[] { "TextReader", "textReader" }, new string[] { "LoadOptions", "options" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", new string[][] { new string[] { "XmlReader", "xmlReader" } }, visibility)); //Parse Methods xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Parse", new string[][] { new string[] { "System.String", "text" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Parse", new string[][] { new string[] { "System.String", "text" }, new string[] { "LoadOptions", "options" } }, visibility)); //Save Methods xroot.Members.Add( CodeDomHelper.CreateXRootSave(new string[][] { new string[] { "System.String", "fileName" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootSave(new string[][] { new string[] { "TextWriter", "textWriter" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootSave(new string[][] { new string[] { "XmlWriter", "writer" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootSave(new string[][] { new string[] { "TextWriter", "textWriter" }, new string[] { "SaveOptions", "options" } }, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootSave(new string[][] { new string[] { "System.String", "fileName" }, new string[] { "SaveOptions", "options" } }, visibility)); CodeMemberProperty docProp = CodeDomHelper.CreateProperty("XDocument", "XDocument", docField, visibility.ToMemberAttribute(), false); xroot.Members.Add(docProp); CodeMemberProperty rootProp = CodeDomHelper.CreateProperty("Root", "XTypedElement", rootField, visibility.ToMemberAttribute(), false); xroot.Members.Add(rootProp); for (int i = 0; i < elements.Count; i++) { string typeName = elements[i].Name; string fqTypeName = (namespaces == null || namespaces[i].Name == String.Empty) ? typeName : "global::" + namespaces[i].Name + "." + typeName; xroot.Members.Add(CodeDomHelper.CreateXRootFunctionalConstructor(fqTypeName, visibility)); xroot.Members.Add(CodeDomHelper.CreateXRootGetter(typeName, fqTypeName, lst, visibility)); } codeNamespace.Types.Add(xroot); }
private void CreateXRoot(CodeNamespace codeNamespace, string rootName, List <CodeTypeDeclaration> elements, List <CodeNamespace> namespaces) { if (codeNamespace != null) { LocalSymbolTable lst = new LocalSymbolTable(this.settings); CodeTypeDeclaration xroot = CodeDomHelper.CreateTypeDeclaration(rootName, null); CodeMemberField docField = CodeDomHelper.CreateMemberField("doc", "XDocument", MemberAttributes.Private, false); CodeMemberField rootField = CodeDomHelper.CreateMemberField("rootObject", "XTypedElement", MemberAttributes.Private, false); xroot.Members.Add(docField); xroot.Members.Add(rootField); lst.Init(rootName); lst.RegisterMember("doc"); lst.RegisterMember("rootObject"); lst.RegisterMember("Load"); lst.RegisterMember("Parse"); lst.RegisterMember("Save"); lst.RegisterMember("XDocument"); xroot.Members.Add(CodeDomHelper.CreateConstructor(MemberAttributes.Private)); CodeTypeMemberCollection members = xroot.Members; string[][] strArrays = new string[1][]; string[] strArrays1 = new string[] { "System.String", "xmlFile" }; strArrays[0] = strArrays1; members.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", strArrays)); CodeTypeMemberCollection codeTypeMemberCollection = xroot.Members; strArrays = new string[2][]; strArrays1 = new string[] { "System.String", "xmlFile" }; strArrays[0] = strArrays1; strArrays1 = new string[] { "LoadOptions", "options" }; strArrays[1] = strArrays1; codeTypeMemberCollection.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", strArrays)); CodeTypeMemberCollection members1 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "TextReader", "textReader" }; strArrays[0] = strArrays1; members1.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", strArrays)); CodeTypeMemberCollection codeTypeMemberCollection1 = xroot.Members; strArrays = new string[2][]; strArrays1 = new string[] { "TextReader", "textReader" }; strArrays[0] = strArrays1; strArrays1 = new string[] { "LoadOptions", "options" }; strArrays[1] = strArrays1; codeTypeMemberCollection1.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", strArrays)); CodeTypeMemberCollection members2 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "XmlReader", "xmlReader" }; strArrays[0] = strArrays1; members2.Add(CodeDomHelper.CreateXRootMethod(rootName, "Load", strArrays)); CodeTypeMemberCollection codeTypeMemberCollection2 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "System.String", "text" }; strArrays[0] = strArrays1; codeTypeMemberCollection2.Add(CodeDomHelper.CreateXRootMethod(rootName, "Parse", strArrays)); CodeTypeMemberCollection members3 = xroot.Members; strArrays = new string[2][]; strArrays1 = new string[] { "System.String", "text" }; strArrays[0] = strArrays1; strArrays1 = new string[] { "LoadOptions", "options" }; strArrays[1] = strArrays1; members3.Add(CodeDomHelper.CreateXRootMethod(rootName, "Parse", strArrays)); CodeTypeMemberCollection codeTypeMemberCollection3 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "System.String", "fileName" }; strArrays[0] = strArrays1; codeTypeMemberCollection3.Add(CodeDomHelper.CreateXRootSave(strArrays)); CodeTypeMemberCollection members4 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "TextWriter", "textWriter" }; strArrays[0] = strArrays1; members4.Add(CodeDomHelper.CreateXRootSave(strArrays)); CodeTypeMemberCollection codeTypeMemberCollection4 = xroot.Members; strArrays = new string[1][]; strArrays1 = new string[] { "XmlWriter", "writer" }; strArrays[0] = strArrays1; codeTypeMemberCollection4.Add(CodeDomHelper.CreateXRootSave(strArrays)); CodeTypeMemberCollection members5 = xroot.Members; strArrays = new string[2][]; strArrays1 = new string[] { "TextWriter", "textWriter" }; strArrays[0] = strArrays1; strArrays1 = new string[] { "SaveOptions", "options" }; strArrays[1] = strArrays1; members5.Add(CodeDomHelper.CreateXRootSave(strArrays)); CodeTypeMemberCollection codeTypeMemberCollection5 = xroot.Members; strArrays = new string[2][]; strArrays1 = new string[] { "System.String", "fileName" }; strArrays[0] = strArrays1; strArrays1 = new string[] { "SaveOptions", "options" }; strArrays[1] = strArrays1; codeTypeMemberCollection5.Add(CodeDomHelper.CreateXRootSave(strArrays)); CodeMemberProperty prop = CodeDomHelper.CreateProperty("XDocument", "XDocument", docField, MemberAttributes.Public, false); xroot.Members.Add(prop); for (int i = 0; i < elements.Count; i++) { string typeName = elements[i].Name; string fqTypeName = (namespaces == null || namespaces[i].Name == string.Empty ? typeName : string.Concat("global::", namespaces[i].Name, ".", typeName)); xroot.Members.Add(CodeDomHelper.CreateXRootFunctionalConstructor(fqTypeName)); xroot.Members.Add(CodeDomHelper.CreateXRootGetter(typeName, fqTypeName, lst)); } codeNamespace.Types.Add(xroot); } }
internal virtual void CreateDefaultConstructor(List <ClrAnnotation> annotations) { this.decl.Members.Add(TypeBuilder.ApplyAnnotations(CodeDomHelper.CreateConstructor(MemberAttributes.Public), annotations, null)); }