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); }
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); }
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); }
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); }
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())); }