Пример #1
0
        private void XNameGetExpression()
        {
            CodeExpression xNameExp = new CodePrimitiveExpression(this.schemaName);
            CodeExpression xNsExp   = new CodePrimitiveExpression(this.propertyNs);

            this.xNameGetExpression = CodeDomHelper.XNameGetExpression(xNameExp, xNsExp);
        }
Пример #2
0
        public static CodeMemberProperty CreateSchemaNameProperty(string schemaName, string schemaNs)
        {
            CodeMemberProperty property = CodeDomHelper.CreateInterfaceImplProperty("SchemaName", "IXMetaData", new CodeTypeReference("XName"));

            property.GetStatements.Add(new CodeMethodReturnStatement(CodeDomHelper.XNameGetExpression(schemaName, schemaNs)));
            return(property);
        }
Пример #3
0
        internal void AddTypeToTypeManager(CodeStatementCollection dictionaryStatements, string dictionaryName)
        {
            string typeRef = string.Concat("global::", this.clrTypeInfo.clrFullTypeName);

            CodeExpression[] codeExpressionArray = new CodeExpression[] { CodeDomHelper.XNameGetExpression(this.clrTypeInfo.schemaName, this.clrTypeInfo.schemaNs), CodeDomHelper.Typeof(typeRef) };
            dictionaryStatements.Add(CodeDomHelper.CreateMethodCallFromField(dictionaryName, "Add", codeExpressionArray));
        }
Пример #4
0
        private void AddSubstGetStatements(CodeStatementCollection getStatements)
        {
            Debug.Assert(this.propertyOrigin == SchemaOrigin.Element);
            CodeExpression[] substParams = new CodeExpression[this.substitutionMembers.Count + 2];
            substParams[0] = CodeDomHelper.This();
            substParams[1] = CodeDomHelper.SingletonTypeManager();
            int i = 2;

            foreach (XmlSchemaElement elem in this.substitutionMembers)
            {
                int num = i;
                i = num + 1;
                substParams[num] = CodeDomHelper.XNameGetExpression(elem.QualifiedName.Name, elem.QualifiedName.Namespace);
            }
            getStatements.Add(new CodeVariableDeclarationStatement("XTypedElement", "x", CodeDomHelper.CreateMethodCall(new CodeTypeReferenceExpression("XTypedServices"), "ToSubstitutedXTypedElement", substParams)));
            this.CheckOccurrence(getStatements);
            getStatements.Add(new CodeMethodReturnStatement(new CodeCastExpression(this.ReturnType, new CodeVariableReferenceExpression("x"))));
        }
Пример #5
0
 internal override void AddToContentModel(CodeObjectCreateExpression contentModelExpression)
 {
     Debug.Assert((contentModelExpression == null ? false : this.propertyOrigin == SchemaOrigin.Element));
     if (!this.IsSubstitutionHead)
     {
         CodeExpressionCollection parameters          = contentModelExpression.Parameters;
         CodeExpression[]         codeExpressionArray = new CodeExpression[] { this.xNameGetExpression };
         parameters.Add(new CodeObjectCreateExpression("NamedContentModelEntity", codeExpressionArray));
     }
     else
     {
         CodeExpression[] substParams = new CodeExpression[this.substitutionMembers.Count];
         int i = 0;
         foreach (XmlSchemaElement elem in this.substitutionMembers)
         {
             int num = i;
             i = num + 1;
             substParams[num] = CodeDomHelper.XNameGetExpression(elem.QualifiedName.Name, elem.QualifiedName.Namespace);
         }
         contentModelExpression.Parameters.Add(new CodeObjectCreateExpression("SubstitutedContentModelEntity", substParams));
     }
 }
Пример #6
0
        private CodeExpression[] GetListParameters(bool set, bool constructor)
        {
            CodeExpression[] listParameters = null;
            int            paramCount       = 2;
            CodeExpression typeParam        = null;
            CodeExpression nameOrValue      = null;

            if (set)
            {
                paramCount++;
                if (!constructor)
                {
                    nameOrValue = CodeDomHelper.SetValue();
                }
                else
                {
                    nameOrValue = new CodeVariableReferenceExpression(this.propertyName);
                }
            }
            if (!this.IsSubstitutionHead)
            {
                paramCount++;
                if (!this.typeRef.IsSimpleType)
                {
                    typeParam = CodeDomHelper.SingletonTypeManager();
                }
                else
                {
                    typeParam = this.GetSchemaDatatypeExpression();
                    if (this.fixedDefaultValue != null)
                    {
                        paramCount++;
                    }
                }
            }
            else
            {
                paramCount += this.substitutionMembers.Count;
                typeParam   = CodeDomHelper.SingletonTypeManager();
            }
            listParameters = new CodeExpression[paramCount];
            int paramIndex = 0;
            int num        = paramIndex;

            paramIndex          = num + 1;
            listParameters[num] = CodeDomHelper.This();
            int num1 = paramIndex;

            paramIndex           = num1 + 1;
            listParameters[num1] = typeParam;
            if (nameOrValue != null)
            {
                int num2 = paramIndex;
                paramIndex           = num2 + 1;
                listParameters[num2] = nameOrValue;
            }
            if (!this.IsSubstitutionHead)
            {
                int num3 = paramIndex;
                paramIndex           = num3 + 1;
                listParameters[num3] = this.xNameGetExpression;
            }
            else
            {
                foreach (XmlSchemaElement elem in this.substitutionMembers)
                {
                    int num4 = paramIndex;
                    paramIndex           = num4 + 1;
                    listParameters[num4] = CodeDomHelper.XNameGetExpression(elem.QualifiedName.Name, elem.QualifiedName.Namespace);
                }
            }
            if (this.fixedDefaultValue != null)
            {
                if (this.FixedValue == null)
                {
                    int num5 = paramIndex;
                    paramIndex           = num5 + 1;
                    listParameters[num5] = new CodeFieldReferenceExpression(null, NameGenerator.ChangeClrName(this.propertyName, NameOptions.MakeDefaultValueField));
                }
                else
                {
                    int num6 = paramIndex;
                    paramIndex           = num6 + 1;
                    listParameters[num6] = new CodeFieldReferenceExpression(null, NameGenerator.ChangeClrName(this.propertyName, NameOptions.MakeFixedValueField));
                }
            }
            return(listParameters);
        }
Пример #7
0
        public static CodeMethodInvokeExpression XNameGetExpression(string name, string ns)
        {
            CodeMethodInvokeExpression codeMethodInvokeExpression = CodeDomHelper.XNameGetExpression(new CodePrimitiveExpression(name), new CodePrimitiveExpression(ns));

            return(codeMethodInvokeExpression);
        }
Пример #8
0
 internal override void CreateProperty(ClrBasePropertyInfo propertyInfo, List <ClrAnnotation> annotations)
 {
     if ((!this.clrTypeInfo.InlineBaseType ? false : propertyInfo.FromBaseType))
     {
         propertyInfo.IsNew = true;
     }
     this.propertyBuilder.GenerateCode(propertyInfo, annotations);
     if ((propertyInfo.ContentType != ContentType.Property ? false : !propertyInfo.IsDuplicate))
     {
         CodeStatementCollection codeStatementCollection = this.propertyDictionaryAddStatements;
         CodeExpression[]        codeExpressionArray     = new CodeExpression[] { CodeDomHelper.XNameGetExpression(propertyInfo.SchemaName, propertyInfo.PropertyNs), CodeDomHelper.Typeof(propertyInfo.ClrTypeName) };
         codeStatementCollection.Add(CodeDomHelper.CreateMethodCallFromField("localElementDictionary", "Add", codeExpressionArray));
     }
 }
Пример #9
0
        internal static CodeTypeDeclaration CreateTypeManager(XmlQualifiedName rootElementName, bool enableServiceReference, CodeStatementCollection typeDictionaryStatements, CodeStatementCollection elementDictionaryStatements, CodeStatementCollection wrapperDictionaryStatements)
        {
            string servicesClassName             = NameGenerator.GetServicesClassName();
            CodeTypeDeclaration servicesTypeDecl = new CodeTypeDeclaration(servicesClassName)
            {
                Attributes = MemberAttributes.Public
            };
            CodeMemberField     singletonField            = CodeDomHelper.CreateMemberField("typeManagerSingleton", servicesClassName, MemberAttributes.Static, true);
            CodeMemberProperty  singletonProperty         = CodeDomHelper.CreateProperty("Instance", null, singletonField, MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public, false);
            MemberAttributes    privateStatic             = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Assembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Private;
            CodeTypeConstructor staticServicesConstructor = new CodeTypeConstructor();
            CodeTypeReference   returnType        = CodeDomHelper.CreateDictionaryType("XName", "System.Type");
            CodeTypeReference   wrapperReturnType = CodeDomHelper.CreateDictionaryType("System.Type", "System.Type");
            CodeMemberProperty  typeDictProperty  = null;

            if (typeDictionaryStatements.Count <= 0)
            {
                typeDictProperty = CodeDomHelper.CreateInterfaceImplProperty("GlobalTypeDictionary", "ILinqToXsdTypeManager", returnType);
                typeDictProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("XTypedServices"), "EmptyDictionary")));
            }
            else
            {
                typeDictProperty = CodeDomHelper.CreateInterfaceImplProperty("GlobalTypeDictionary", "ILinqToXsdTypeManager", returnType, "typeDictionary");
                CodeMemberField  staticTypeDictionary = CodeDomHelper.CreateDictionaryField("typeDictionary", "XName", "System.Type");
                CodeMemberMethod buildTypeDictionary  = CodeDomHelper.CreateMethod("BuildTypeDictionary", privateStatic, null);
                buildTypeDictionary.Statements.AddRange(typeDictionaryStatements);
                staticServicesConstructor.Statements.Add(CodeDomHelper.CreateMethodCall(null, "BuildTypeDictionary", new CodeExpression[0]));
                servicesTypeDecl.Members.Add(staticTypeDictionary);
                servicesTypeDecl.Members.Add(buildTypeDictionary);
            }
            CodeMemberProperty elementDictProperty = null;

            if (elementDictionaryStatements.Count <= 0)
            {
                elementDictProperty = CodeDomHelper.CreateInterfaceImplProperty("GlobalElementDictionary", "ILinqToXsdTypeManager", returnType);
                elementDictProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("XTypedServices"), "EmptyDictionary")));
            }
            else
            {
                elementDictProperty = CodeDomHelper.CreateInterfaceImplProperty("GlobalElementDictionary", "ILinqToXsdTypeManager", returnType, "elementDictionary");
                CodeMemberField  staticElementDictionary = CodeDomHelper.CreateDictionaryField("elementDictionary", "XName", "System.Type");
                CodeMemberMethod buildElementDictionary  = CodeDomHelper.CreateMethod("BuildElementDictionary", privateStatic, null);
                buildElementDictionary.Statements.AddRange(elementDictionaryStatements);
                staticServicesConstructor.Statements.Add(CodeDomHelper.CreateMethodCall(null, "BuildElementDictionary", new CodeExpression[0]));
                servicesTypeDecl.Members.Add(staticElementDictionary);
                servicesTypeDecl.Members.Add(buildElementDictionary);
            }
            CodeMemberProperty wrapperDictProperty = null;

            if (wrapperDictionaryStatements.Count <= 0)
            {
                wrapperDictProperty = CodeDomHelper.CreateInterfaceImplProperty("RootContentTypeMapping", "ILinqToXsdTypeManager", wrapperReturnType);
                wrapperDictProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("XTypedServices"), "EmptyTypeMappingDictionary")));
            }
            else
            {
                wrapperDictProperty = CodeDomHelper.CreateInterfaceImplProperty("RootContentTypeMapping", "ILinqToXsdTypeManager", wrapperReturnType, "wrapperDictionary");
                CodeMemberField  staticWrapperDictionary = CodeDomHelper.CreateDictionaryField("wrapperDictionary", "System.Type", "System.Type");
                CodeMemberMethod buildWrapperDictionary  = CodeDomHelper.CreateMethod("BuildWrapperDictionary", privateStatic, null);
                buildWrapperDictionary.Statements.AddRange(wrapperDictionaryStatements);
                staticServicesConstructor.Statements.Add(CodeDomHelper.CreateMethodCall(null, "BuildWrapperDictionary", new CodeExpression[0]));
                servicesTypeDecl.Members.Add(staticWrapperDictionary);
                servicesTypeDecl.Members.Add(buildWrapperDictionary);
            }
            string            schemaSetFieldName = "schemaSet";
            CodeTypeReference schemaSetType      = new CodeTypeReference("XmlSchemaSet");
            CodeMemberField   schemaSetField     = new CodeMemberField(schemaSetType, schemaSetFieldName)
            {
                Attributes = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Assembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Private
            };
            CodeMemberMethod addSchemasMethod = CodeDomHelper.CreateMethod("AddSchemas", MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyOrAssembly, null);

            addSchemasMethod.Parameters.Add(new CodeParameterDeclarationExpression("XmlSchemaSet", "schemas"));
            CodeStatementCollection         statements = addSchemasMethod.Statements;
            CodeVariableReferenceExpression codeVariableReferenceExpression = new CodeVariableReferenceExpression("schemas");

            CodeExpression[] codeFieldReferenceExpression = new CodeExpression[] { new CodeFieldReferenceExpression(null, schemaSetFieldName) };
            statements.Add(CodeDomHelper.CreateMethodCall(codeVariableReferenceExpression, "Add", codeFieldReferenceExpression));
            CodeTypeReferenceExpression  interLockedType              = new CodeTypeReferenceExpression("System.Threading.Interlocked");
            CodeMemberProperty           schemaSetProperty            = CodeDomHelper.CreateInterfaceImplProperty("Schemas", "ILinqToXsdTypeManager", schemaSetType);
            CodeFieldReferenceExpression schemaSetFieldRef            = new CodeFieldReferenceExpression(null, schemaSetFieldName);
            CodeDirectionExpression      schemaSetParam               = new CodeDirectionExpression(FieldDirection.Ref, schemaSetFieldRef);
            CodeStatementCollection      getStatements                = schemaSetProperty.GetStatements;
            CodeBinaryOperatorExpression codeBinaryOperatorExpression = new CodeBinaryOperatorExpression(schemaSetFieldRef, CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null));

            CodeStatement[] codeVariableDeclarationStatement = new CodeStatement[] { new CodeVariableDeclarationStatement(schemaSetType, "tempSet", new CodeObjectCreateExpression(schemaSetType, new CodeExpression[0])), null };
            codeFieldReferenceExpression        = new CodeExpression[] { schemaSetParam, new CodeVariableReferenceExpression("tempSet"), new CodePrimitiveExpression(null) };
            codeVariableDeclarationStatement[1] = new CodeExpressionStatement(CodeDomHelper.CreateMethodCall(interLockedType, "CompareExchange", codeFieldReferenceExpression));
            getStatements.Add(new CodeConditionStatement(codeBinaryOperatorExpression, codeVariableDeclarationStatement));
            schemaSetProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(schemaSetFieldName)));
            schemaSetProperty.SetStatements.Add(new CodeAssignStatement(schemaSetFieldRef, new CodePropertySetValueReferenceExpression()));
            servicesTypeDecl.Members.Add(schemaSetField);
            servicesTypeDecl.Members.Add(schemaSetProperty);
            servicesTypeDecl.Members.Add(addSchemasMethod);
            servicesTypeDecl.Members.Add(typeDictProperty);
            servicesTypeDecl.Members.Add(elementDictProperty);
            servicesTypeDecl.Members.Add(wrapperDictProperty);
            servicesTypeDecl.BaseTypes.Add("ILinqToXsdTypeManager");
            CodeMemberMethod getRootType = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public,
                Name       = "GetRootType",
                ReturnType = new CodeTypeReference("System.Type")
            };

            if (!rootElementName.IsEmpty)
            {
                CodeStatementCollection      codeStatementCollection       = getRootType.Statements;
                CodeFieldReferenceExpression codeFieldReferenceExpression1 = CodeDomHelper.CreateFieldReference(null, "elementDictionary");
                codeFieldReferenceExpression = new CodeExpression[] { CodeDomHelper.XNameGetExpression(rootElementName.Name, rootElementName.Namespace) };
                codeStatementCollection.Add(new CodeMethodReturnStatement(new CodeIndexerExpression(codeFieldReferenceExpression1, codeFieldReferenceExpression)));
            }
            else
            {
                getRootType.Statements.Add(new CodeMethodReturnStatement(CodeDomHelper.Typeof("Xml.Schema.Linq.XTypedElement")));
            }
            servicesTypeDecl.Members.Add(staticServicesConstructor);
            servicesTypeDecl.Members.Add(getRootType);
            servicesTypeDecl.Members.Add(singletonField);
            servicesTypeDecl.Members.Add(singletonProperty);
            return(servicesTypeDecl);
        }