コード例 #1
0
        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());
                }
            }
            ;
        }
コード例 #2
0
 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>();
 }
コード例 #3
0
 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>();
 }
コード例 #4
0
 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();
 }
コード例 #5
0
        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);
        }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
 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();
 }
コード例 #8
0
        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;
        }
コード例 #9
0
 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));
     }
 }
コード例 #10
0
        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;
            }
        }
コード例 #11
0
ファイル: TypeBuilder.cs プロジェクト: pusp/o2platform
        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;

        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
ファイル: NameMangler.cs プロジェクト: dipdapdop/linqtoxsd
 public LocalSymbolTable(LinqToXsdSettings configSettings)
 {
     this.ConfigSettings = configSettings;
 }
コード例 #15
0
 public GlobalSymbolTable(LinqToXsdSettings settings)
 {
     this.configSettings          = settings;
     this.symbols                 = new Dictionary <SymbolEntry, SymbolEntry>();
     this.schemaNameToIdentifiers = new Dictionary <XmlSchemaObject, string>();
 }
コード例 #16
0
        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());
                }
            }
        }
コード例 #17
0
        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);
        }
コード例 #18
0
ファイル: ClrSimpleTypeInfo.cs プロジェクト: pusp/o2platform
         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;
             }
         }
コード例 #19
0
ファイル: NameMangler.cs プロジェクト: pusp/o2platform
 public GlobalSymbolTable(LinqToXsdSettings settings)
 {
     configSettings = settings;
     symbols = new Dictionary<SymbolEntry, SymbolEntry>();
     schemaNameToIdentifiers = new Dictionary<XmlSchemaObject, string>();
 }
コード例 #20
0
ファイル: NameMangler.cs プロジェクト: IObsequious/LinqToXsd
 public LocalSymbolTable(LinqToXsdSettings configSettings)
 {
     this.ConfigSettings = configSettings;
 }