private CodeMemberProperty CreateUntypedProperty(CodeFieldReferenceExpression fieldRef)
        {
            CodeMemberProperty xElementProperty = CodeDomHelper.CreateProperty(new CodeTypeReference("XElement"), true);

            xElementProperty.Name       = "Untyped";
            xElementProperty.Attributes = MemberAttributes.Override | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public;
            CodePropertyReferenceExpression baseUntyped = new CodePropertyReferenceExpression(new CodeBaseReferenceExpression(), "Untyped");

            xElementProperty.GetStatements.Add(new CodeMethodReturnStatement(baseUntyped));
            xElementProperty.SetStatements.Add(new CodeAssignStatement(baseUntyped, CodeDomHelper.SetValue()));
            if (!this.clrTypeInfo.IsSubstitutionHead)
            {
                xElementProperty.SetStatements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(fieldRef, "Untyped"), CodeDomHelper.SetValue()));
            }
            else
            {
                CodeStatementCollection      setStatements = xElementProperty.SetStatements;
                CodeBinaryOperatorExpression codeBinaryOperatorExpression = new CodeBinaryOperatorExpression(fieldRef, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null));
                CodeStatement[] codeAssignStatement = new CodeStatement[] { new CodeAssignStatement(new CodePropertyReferenceExpression(fieldRef, "Untyped"), CodeDomHelper.SetValue()) };
                setStatements.Add(new CodeConditionStatement(codeBinaryOperatorExpression, codeAssignStatement));
            }
            return(xElementProperty);
        }
Пример #2
0
        public static CodeMemberProperty CreateProperty(string propertyName, string propertyType, CodeMemberField field, MemberAttributes attributes, bool hasSet)
        {
            CodeTypeReference returnType = null;

            returnType = (propertyType == null ? field.Type : new CodeTypeReference(propertyType));
            CodeMemberProperty valueProperty = CodeDomHelper.CreateProperty(propertyName, returnType, attributes);

            valueProperty.GetStatements.Add(new CodeMethodReturnStatement(CodeDomHelper.CreateFieldReference(null, field.Name)));
            if (hasSet)
            {
                CodeExpression rightExpression = null;
                if (!(field.Type.BaseType != returnType.BaseType))
                {
                    rightExpression = CodeDomHelper.SetValue();
                }
                else
                {
                    rightExpression = new CodeCastExpression(field.Type, CodeDomHelper.SetValue());
                }
                valueProperty.SetStatements.Add(new CodeAssignStatement(CodeDomHelper.CreateFieldReference("this", field.Name), rightExpression));
            }
            return(valueProperty);
        }
Пример #3
0
        private CodeMethodInvokeExpression SetValueMethodCall()
        {
            CodeExpression[]           codeExpressionArray;
            CodeMethodInvokeExpression methodCall = null;
            string setMethodName = "Set";
            bool   isUnion       = (!this.IsUnion ? false : this.propertyOrigin != SchemaOrigin.Element);

            if (!(this.IsRef ? true : !this.IsSchemaList))
            {
                setMethodName = string.Concat(setMethodName, "List");
            }
            else if (isUnion)
            {
                setMethodName = string.Concat(setMethodName, "Union");
            }
            bool validation = this.Validation;
            bool xNameParm  = true;

            switch (this.propertyOrigin)
            {
            case SchemaOrigin.None:
            case SchemaOrigin.Fragment:
            {
                throw new InvalidOperationException();
            }

            case SchemaOrigin.Element:
            {
                setMethodName = string.Concat(setMethodName, "Element");
                break;
            }

            case SchemaOrigin.Attribute:
            {
                validation    = false;
                setMethodName = string.Concat(setMethodName, "Attribute");
                break;
            }

            case SchemaOrigin.Text:
            {
                setMethodName = string.Concat(setMethodName, "Value");
                xNameParm     = false;
                break;
            }

            default:
            {
                throw new InvalidOperationException();
            }
            }
            if (isUnion)
            {
                if (!xNameParm)
                {
                    CodeThisReferenceExpression codeThisReferenceExpression = CodeDomHelper.This();
                    codeExpressionArray = new CodeExpression[] { CodeDomHelper.SetValue(), new CodePrimitiveExpression(this.propertyName), CodeDomHelper.This(), this.GetSimpleTypeClassExpression() };
                    methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression, setMethodName, codeExpressionArray);
                }
                else
                {
                    CodeThisReferenceExpression codeThisReferenceExpression1 = CodeDomHelper.This();
                    codeExpressionArray = new CodeExpression[] { CodeDomHelper.SetValue(), new CodePrimitiveExpression(this.propertyName), CodeDomHelper.This(), this.xNameGetExpression, this.GetSimpleTypeClassExpression() };
                    methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression1, setMethodName, codeExpressionArray);
                }
            }
            else if (validation)
            {
                setMethodName = string.Concat(setMethodName, "WithValidation");
                if (!xNameParm)
                {
                    CodeThisReferenceExpression codeThisReferenceExpression2 = CodeDomHelper.This();
                    codeExpressionArray = new CodeExpression[] { CodeDomHelper.SetValue(), new CodePrimitiveExpression(base.PropertyName), this.GetSimpleTypeClassExpression() };
                    methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression2, setMethodName, codeExpressionArray);
                }
                else
                {
                    CodeThisReferenceExpression codeThisReferenceExpression3 = CodeDomHelper.This();
                    codeExpressionArray = new CodeExpression[] { this.xNameGetExpression, CodeDomHelper.SetValue(), new CodePrimitiveExpression(base.PropertyName), this.GetSimpleTypeClassExpression() };
                    methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression3, setMethodName, codeExpressionArray);
                }
            }
            else if (!xNameParm)
            {
                CodeThisReferenceExpression codeThisReferenceExpression4 = CodeDomHelper.This();
                codeExpressionArray = new CodeExpression[] { CodeDomHelper.SetValue(), this.GetSchemaDatatypeExpression() };
                methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression4, setMethodName, codeExpressionArray);
            }
            else
            {
                CodeThisReferenceExpression codeThisReferenceExpression5 = CodeDomHelper.This();
                codeExpressionArray = new CodeExpression[] { this.xNameGetExpression, CodeDomHelper.SetValue() };
                methodCall          = CodeDomHelper.CreateMethodCall(codeThisReferenceExpression5, setMethodName, codeExpressionArray);
                if ((this.IsRef ? false : this.typeRef.IsSimpleType))
                {
                    methodCall.Parameters.Add(this.GetSchemaDatatypeExpression());
                }
            }
            return(methodCall);
        }
Пример #4
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);
        }
Пример #5
0
        private void AddListSetStatements(CodeStatementCollection setStatements, CodeTypeReference listType, string listName)
        {
            this.AddFixedValueChecking(setStatements);
            CodeStatement[] codeAssignStatement = new CodeStatement[] { new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), listName), new CodePrimitiveExpression(null)) };
            CodeStatement[] trueStatements      = codeAssignStatement;
            codeAssignStatement = new CodeStatement[1];
            CodeBinaryOperatorExpression codeBinaryOperatorExpression = new CodeBinaryOperatorExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), listName), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null));

            CodeStatement[] codeExpressionStatement = new CodeStatement[] { new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), listName), new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(listType), "Initialize", this.GetListParameters(true, false))) };
            CodeStatement[] codeStatementArray      = codeExpressionStatement;
            codeExpressionStatement = new CodeStatement[1];
            CodeTypeReferenceExpression codeTypeReferenceExpression = new CodeTypeReferenceExpression("XTypedServices");
            string str = string.Concat("SetList<", this.clrTypeName, ">");

            CodeExpression[] codeFieldReferenceExpression = new CodeExpression[] { new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), listName), CodeDomHelper.SetValue() };
            codeExpressionStatement[0] = new CodeExpressionStatement(new CodeMethodInvokeExpression(codeTypeReferenceExpression, str, codeFieldReferenceExpression));
            codeAssignStatement[0]     = new CodeConditionStatement(codeBinaryOperatorExpression, codeStatementArray, codeExpressionStatement);
            CodeStatement[] falseStatements = codeAssignStatement;
            setStatements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(CodeDomHelper.SetValue(), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null)), trueStatements, falseStatements));
        }
 private void AddSetStatements(CodeStatementCollection setStatements)
 {
     setStatements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), this.wrappedFieldName), this.propertyName), CodeDomHelper.SetValue()));
 }