static void GenerateXObjects( XmlSchemaSet set, string csFileName, string configFileName, string assemblyName, bool xmlSerializable, bool nameMangler2) { LinqToXsdSettings configSettings = new LinqToXsdSettings(nameMangler2); if (configFileName != null) { configSettings.Load(configFileName); } configSettings.EnableServiceReference = xmlSerializable; XsdToTypesConverter xsdConverter = new XsdToTypesConverter(configSettings); ClrMappingInfo mapping = xsdConverter.GenerateMapping(set); CodeDomTypesGenerator codeGenerator = new CodeDomTypesGenerator(configSettings); CodeCompileUnit ccu = new CodeCompileUnit(); foreach (CodeNamespace codeNs in codeGenerator.GenerateTypes(mapping)) { ccu.Namespaces.Add(codeNs); } //Write to file CSharpCodeProvider provider = new CSharpCodeProvider(); if (csFileName != string.Empty) { StreamWriter sw = new StreamWriter(csFileName); provider.GenerateCodeFromCompileUnit(ccu, sw, new CodeGeneratorOptions()); sw.Flush(); sw.Close(); PrintMessage(csFileName); } if (assemblyName != string.Empty) { CompilerParameters options = new CompilerParameters(); options.OutputAssembly = assemblyName; options.IncludeDebugInformation = true; options.TreatWarningsAsErrors = true; options.ReferencedAssemblies.Add("System.dll"); options.ReferencedAssemblies.Add("System.Core.dll"); options.ReferencedAssemblies.Add("System.Xml.dll"); options.ReferencedAssemblies.Add("System.Xml.Linq.dll"); options.ReferencedAssemblies.Add("Xml.Schema.Linq.dll"); CompilerResults results = provider.CompileAssemblyFromDom(options, ccu); if (results.Errors.Count > 0) { PrintErrorMessage("compilation error(s): "); for (int i = 0; i < results.Errors.Count; i++) { PrintErrorMessage(results.Errors[i].ToString()); } } else { PrintMessage("Generated Assembly: " + results.CompiledAssembly.ToString()); } } ; }
public XsdToTypesConverter(LinqToXsdSettings configSettings) { this.configSettings = configSettings; symbolTable = new GlobalSymbolTable(configSettings); localSymbolTable = new LocalSymbolTable(); binding = new ClrMappingInfo(); textPropInheritanceTracker = new Dictionary <XmlSchemaType, ClrPropertyInfo>(); substitutionGroups = new Dictionary <XmlQualifiedName, ArrayList>(); }
public XsdToTypesConverter(LinqToXsdSettings configSettings) { this.configSettings = configSettings; symbolTable = new GlobalSymbolTable(configSettings); localSymbolTable = new LocalSymbolTable(configSettings); binding = new ClrMappingInfo(); textPropInheritanceTracker = new Dictionary<XmlSchemaType, ClrPropertyInfo>(); substitutionGroups = new Dictionary<XmlQualifiedName, ArrayList>(); }
public CodeDomTypesGenerator(LinqToXsdSettings settings) { if (settings == null) { throw new ArgumentNullException("Argument setttings should not be null."); } this.settings = settings; codeNamespacesTable = new Dictionary<string, CodeNamespace>(); xroots = new Dictionary<CodeNamespace, List<CodeTypeDeclaration>>(); typeDictionaryAddStatements = new CodeStatementCollection(); elementDictionaryAddStatements = new CodeStatementCollection(); wrapperDictionaryAddStatements = new CodeStatementCollection(); }
internal static CodeExpression MaterializeSimpleTypeDef( ClrSimpleTypeInfo typeInfo, Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { CodeObjectCreateExpression simpleTypeCreate = null; CodeExpressionCollection expressions = null; switch (typeInfo.Variety) { case XmlSchemaDatatypeVariety.Atomic: simpleTypeCreate = new CodeObjectCreateExpression( Constants.AtomicSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); break; case XmlSchemaDatatypeVariety.List: simpleTypeCreate = new CodeObjectCreateExpression( Constants.ListSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); ListSimpleTypeInfo listType = typeInfo as ListSimpleTypeInfo; ClrSimpleTypeInfo itemType = listType.ItemType; expressions.Add(CreateSimpleTypeDef( itemType, nameMappings, settings, true)); break; case XmlSchemaDatatypeVariety.Union: simpleTypeCreate = new CodeObjectCreateExpression( Constants.UnionSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); UnionSimpleTypeInfo unionType = typeInfo as UnionSimpleTypeInfo; CodeArrayCreateExpression memberTypeCreate = new CodeArrayCreateExpression(); memberTypeCreate.CreateType = new CodeTypeReference( Constants.SimpleTypeValidator); foreach (ClrSimpleTypeInfo st in unionType.MemberTypes) { memberTypeCreate.Initializers.Add(CreateSimpleTypeDef( st, nameMappings, settings, true)); } expressions.Add(memberTypeCreate); break; } return(simpleTypeCreate); }
internal static CodeExpression CreateSimpleTypeDef(ClrSimpleTypeInfo typeInfo, Dictionary<XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings, bool memberOrItemType) { //If the enclosed member type or item type is a global named type, reuse the definition if (memberOrItemType && typeInfo.IsGlobal) { typeInfo.UpdateClrTypeName(nameMappings, settings); return CodeDomHelper.CreateFieldReference(typeInfo.clrtypeName, Constants.SimpleTypeDefInnerType); } else { return MaterializeSimpleTypeDef(typeInfo, nameMappings, settings); } }
public CodeDomTypesGenerator(LinqToXsdSettings settings) { if (settings == null) { throw new ArgumentNullException("Argument setttings should not be null."); } this.settings = settings; codeNamespacesTable = new Dictionary <string, CodeNamespace>(); xroots = new Dictionary <CodeNamespace, List <CodeTypeDeclaration> >(); typeDictionaryAddStatements = new CodeStatementCollection(); elementDictionaryAddStatements = new CodeStatementCollection(); wrapperDictionaryAddStatements = new CodeStatementCollection(); }
internal static CodeExpression MaterializeSimpleTypeDef( ClrSimpleTypeInfo typeInfo, Dictionary<XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { CodeObjectCreateExpression simpleTypeCreate = null; CodeExpressionCollection expressions = null; switch(typeInfo.Variety) { case XmlSchemaDatatypeVariety.Atomic: simpleTypeCreate = new CodeObjectCreateExpression( Constants.AtomicSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); break; case XmlSchemaDatatypeVariety.List: simpleTypeCreate = new CodeObjectCreateExpression( Constants.ListSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); ListSimpleTypeInfo listType = typeInfo as ListSimpleTypeInfo; ClrSimpleTypeInfo itemType = listType.ItemType; expressions.Add(CreateSimpleTypeDef( itemType, nameMappings, settings, true)); break; case XmlSchemaDatatypeVariety.Union: simpleTypeCreate = new CodeObjectCreateExpression( Constants.UnionSimpleTypeValidator); expressions = simpleTypeCreate.Parameters; expressions.Add(CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(CreateFacets(typeInfo)); UnionSimpleTypeInfo unionType = typeInfo as UnionSimpleTypeInfo; CodeArrayCreateExpression memberTypeCreate = new CodeArrayCreateExpression(); memberTypeCreate.CreateType = new CodeTypeReference( Constants.SimpleTypeValidator); foreach (ClrSimpleTypeInfo st in unionType.MemberTypes) { memberTypeCreate.Initializers.Add(CreateSimpleTypeDef( st, nameMappings, settings, true)); } expressions.Add(memberTypeCreate); break; } return simpleTypeCreate; }
internal static CodeExpression CreateSimpleTypeDef(ClrSimpleTypeInfo typeInfo, Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings, bool memberOrItemType) { //If the enclosed member type or item type is a global named type, reuse the definition if (memberOrItemType && typeInfo.IsGlobal) { typeInfo.UpdateClrTypeName(nameMappings, settings); return(CodeDomHelper.CreateFieldReference(typeInfo.clrtypeName, Constants.SimpleTypeDefInnerType)); } else { return(MaterializeSimpleTypeDef(typeInfo, nameMappings, settings)); } }
internal void UpdateClrTypeName(Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { string identifier = null; string typeName = innerType.QualifiedName.Name; string clrNameSpace = settings.GetClrNamespace(innerType.QualifiedName.Namespace); if (nameMappings.TryGetValue(innerType, out identifier)) { clrtypeName = identifier; } else { clrtypeName = typeName; } if (clrNameSpace != string.Empty) { clrtypeName = clrNameSpace + "." + clrtypeName; } }
internal static CodeTypeDeclaration CreateSimpleType(ClrSimpleTypeInfo typeInfo, Dictionary<XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { string typeName = typeInfo.clrtypeName; CodeTypeDeclaration simpleTypeDecl = new CodeTypeDeclaration(typeName); simpleTypeDecl.TypeAttributes = TypeAttributes.Sealed | TypeAttributes.Public; //Add private constructor so it cannot be instantiated CodeConstructor privateConst = new CodeConstructor(); privateConst.Attributes = MemberAttributes.Private; simpleTypeDecl.Members.Add(privateConst); //Create a static field for the XTypedSchemaSimpleType CodeMemberField typeField = CodeDomHelper.CreateMemberField(Constants.SimpleTypeDefInnerType, Constants.SimpleTypeValidator, MemberAttributes.Public | MemberAttributes.Static, false); typeField.InitExpression = SimpleTypeCodeDomHelper.CreateSimpleTypeDef(typeInfo, nameMappings, settings, false); simpleTypeDecl.Members.Add(typeField); // inconsistency w/ the wasy ApplyAnnotations are us ApplyAnnotations(simpleTypeDecl, typeInfo); return simpleTypeDecl; }
internal static CodeExpression MaterializeSimpleTypeDef(ClrSimpleTypeInfo typeInfo, Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { CodeObjectCreateExpression simpleTypeCreate = null; CodeExpressionCollection expressions = null; switch (typeInfo.Variety) { case XmlSchemaDatatypeVariety.Atomic: { simpleTypeCreate = new CodeObjectCreateExpression("Xml.Schema.Linq.AtomicSimpleTypeValidator", new CodeExpression[0]); expressions = simpleTypeCreate.Parameters; expressions.Add(SimpleTypeCodeDomHelper.CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(SimpleTypeCodeDomHelper.CreateFacets(typeInfo)); break; } case XmlSchemaDatatypeVariety.List: { simpleTypeCreate = new CodeObjectCreateExpression("Xml.Schema.Linq.ListSimpleTypeValidator", new CodeExpression[0]); expressions = simpleTypeCreate.Parameters; expressions.Add(SimpleTypeCodeDomHelper.CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(SimpleTypeCodeDomHelper.CreateFacets(typeInfo)); ClrSimpleTypeInfo itemType = (typeInfo as ListSimpleTypeInfo).ItemType; expressions.Add(SimpleTypeCodeDomHelper.CreateSimpleTypeDef(itemType, nameMappings, settings, true)); break; } case XmlSchemaDatatypeVariety.Union: { simpleTypeCreate = new CodeObjectCreateExpression("Xml.Schema.Linq.UnionSimpleTypeValidator", new CodeExpression[0]); expressions = simpleTypeCreate.Parameters; expressions.Add(SimpleTypeCodeDomHelper.CreateGetBuiltInSimpleType(typeInfo.TypeCode)); expressions.Add(SimpleTypeCodeDomHelper.CreateFacets(typeInfo)); UnionSimpleTypeInfo unionType = typeInfo as UnionSimpleTypeInfo; CodeArrayCreateExpression memberTypeCreate = new CodeArrayCreateExpression() { CreateType = new CodeTypeReference("Xml.Schema.Linq.SimpleTypeValidator") }; ClrSimpleTypeInfo[] memberTypes = unionType.MemberTypes; for (int i = 0; i < (int)memberTypes.Length; i++) { ClrSimpleTypeInfo st = memberTypes[i]; memberTypeCreate.Initializers.Add(SimpleTypeCodeDomHelper.CreateSimpleTypeDef(st, nameMappings, settings, true)); } expressions.Add(memberTypeCreate); break; } } return(simpleTypeCreate); }
internal static CodeTypeDeclaration CreateSimpleType(ClrSimpleTypeInfo typeInfo, Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { CodeTypeDeclaration simpleTypeDecl = new CodeTypeDeclaration(typeInfo.clrtypeName) { TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed }; CodeConstructor privateConst = new CodeConstructor() { Attributes = MemberAttributes.Private }; simpleTypeDecl.Members.Add(privateConst); CodeMemberField typeField = CodeDomHelper.CreateMemberField("TypeDefinition", "Xml.Schema.Linq.SimpleTypeValidator", MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public, false); typeField.InitExpression = SimpleTypeCodeDomHelper.CreateSimpleTypeDef(typeInfo, nameMappings, settings, false); simpleTypeDecl.Members.Add(typeField); TypeBuilder.ApplyAnnotations(simpleTypeDecl, typeInfo); return(simpleTypeDecl); }
public LocalSymbolTable(LinqToXsdSettings configSettings) { this.ConfigSettings = configSettings; }
public GlobalSymbolTable(LinqToXsdSettings settings) { this.configSettings = settings; this.symbols = new Dictionary <SymbolEntry, SymbolEntry>(); this.schemaNameToIdentifiers = new Dictionary <XmlSchemaObject, string>(); }
public static void GenerateXObjects( XmlSchemaSet set, string csFileName, string configFileName, string assemblyName, bool xmlSerializable, bool nameMangler2) { var configSettings = new LinqToXsdSettings(nameMangler2); if (configFileName != null) { configSettings.Load(configFileName); } configSettings.EnableServiceReference = xmlSerializable; var xsdConverter = new XsdToTypesConverter(configSettings); var mapping = xsdConverter.GenerateMapping(set); var codeGenerator = new CodeDomTypesGenerator(configSettings); var ccu = new CodeCompileUnit(); foreach (var codeNs in codeGenerator.GenerateTypes(mapping)) { ccu.Namespaces.Add(codeNs); } //Write to file var provider = new CSharpCodeProvider(); if (csFileName != string.Empty && csFileName != null) { using (var update = new Update(csFileName, System.Text.Encoding.UTF8)) { provider.GenerateCodeFromCompileUnit( ccu, update.Writer, new CodeGeneratorOptions()); } PrintMessage(csFileName); } if (assemblyName != string.Empty) { var options = new CompilerParameters { OutputAssembly = assemblyName, IncludeDebugInformation = true, TreatWarningsAsErrors = true, }; options.TempFiles.KeepFiles = true; { var r = options.ReferencedAssemblies; r.Add("System.dll"); r.Add("System.Core.dll"); r.Add("System.Xml.dll"); r.Add("System.Xml.Linq.dll"); r.Add("Xml.Schema.Linq.dll"); } var results = provider.CompileAssemblyFromDom(options, ccu); if (results.Errors.Count > 0) { PrintErrorMessage("compilation error(s): "); for (int i = 0; i < results.Errors.Count; i++) { PrintErrorMessage(results.Errors[i].ToString()); } throw new Exception("compilation error(s)"); } else { PrintMessage( "Generated Assembly: " + results.CompiledAssembly.ToString()); } } }
internal static CodeExpression CreateSimpleTypeDef(ClrSimpleTypeInfo typeInfo, Dictionary <XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings, bool memberOrItemType) { CodeExpression codeExpression; if ((!memberOrItemType ? true : !typeInfo.IsGlobal)) { codeExpression = SimpleTypeCodeDomHelper.MaterializeSimpleTypeDef(typeInfo, nameMappings, settings); } else { typeInfo.UpdateClrTypeName(nameMappings, settings); codeExpression = CodeDomHelper.CreateFieldReference(typeInfo.clrtypeName, "TypeDefinition"); } return(codeExpression); }
internal void UpdateClrTypeName(Dictionary<XmlSchemaObject, string> nameMappings, LinqToXsdSettings settings) { string identifier = null; string typeName = innerType.QualifiedName.Name; string clrNameSpace = settings.GetClrNamespace(innerType.QualifiedName.Namespace); if (nameMappings.TryGetValue(innerType, out identifier)) { clrtypeName = identifier; } else { clrtypeName = typeName; } if (clrNameSpace != string.Empty) { clrtypeName = clrNameSpace + "." + clrtypeName; } }
public GlobalSymbolTable(LinqToXsdSettings settings) { configSettings = settings; symbols = new Dictionary<SymbolEntry, SymbolEntry>(); schemaNameToIdentifiers = new Dictionary<XmlSchemaObject, string>(); }