public static CodeTypeMember CreateSave(string paramName, string paramType) { CodeMemberMethod saveMethod = new CodeMemberMethod() { Name = "Save", Attributes = (MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Override | MemberAttributes.Const | MemberAttributes.New | MemberAttributes.Overloaded | MemberAttributes.ScopeMask | MemberAttributes.VTableMask) | MemberAttributes.Public }; saveMethod.Parameters.Add(CodeDomHelper.CreateParameter(paramName, paramType)); CodeStatementCollection statements = saveMethod.Statements; CodeTypeReferenceExpression codeTypeReferenceExpression = new CodeTypeReferenceExpression("XTypedServices"); CodeExpression[] codeVariableReferenceExpression = new CodeExpression[] { new CodeVariableReferenceExpression(paramName), new CodePropertyReferenceExpression(null, "Untyped") }; statements.Add(CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression, "Save", codeVariableReferenceExpression)); return(saveMethod); }
public static CodeMemberMethod CreateXRootSave(string[][] paramList) { CodeMemberMethod staticMethod = new CodeMemberMethod() { Name = "Save", Attributes = MemberAttributes.Public }; CodeExpression[] parameterExp = new CodeExpression[(int)paramList.Length]; for (int i = 0; i < (int)paramList.Length; i++) { string[] paramRef = paramList[i]; staticMethod.Parameters.Add(CodeDomHelper.CreateParameter(paramRef[1], paramRef[0])); parameterExp[i] = new CodeVariableReferenceExpression(paramRef[1]); } CodeExpression doc = new CodeVariableReferenceExpression("doc"); staticMethod.Statements.Add(CodeDomHelper.CreateMethodCall(doc, "Save", parameterExp)); return(staticMethod); }
public static CodeTypeMember CreateStaticMethod(string methodName, string typeT, string typeT1, string parameterName, string parameterType, bool useAutoTyping) { CodeExpression[] codeExpressionArray; CodeMemberMethod staticMethod = new CodeMemberMethod() { Name = methodName, Attributes = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public, ReturnType = new CodeTypeReference(typeT) }; staticMethod.Parameters.Add(CodeDomHelper.CreateParameter(parameterName, parameterType)); CodeExpression parameterExp = new CodeVariableReferenceExpression(parameterName); if (!useAutoTyping) { CodeTypeReferenceExpression codeTypeReferenceExpression = new CodeTypeReferenceExpression("XTypedServices"); string str = string.Concat(methodName, "<", CodeDomHelper.GetInnerType(typeT, typeT1), ">"); codeExpressionArray = new CodeExpression[] { parameterExp }; CodeMethodInvokeExpression methodCall = CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression, str, codeExpressionArray); if (typeT1 != null) { methodCall.Parameters.Add(CodeDomHelper.SingletonTypeManager()); } staticMethod.Statements.Add(new CodeMethodReturnStatement(methodCall)); } else { CodeStatementCollection statements = staticMethod.Statements; CodeTypeReference returnType = staticMethod.ReturnType; CodeTypeReferenceExpression codeTypeReferenceExpression1 = new CodeTypeReferenceExpression("XTypedServices"); codeExpressionArray = new CodeExpression[2]; CodeTypeReferenceExpression codeTypeReferenceExpression2 = new CodeTypeReferenceExpression("XElement"); CodeExpression[] codeExpressionArray1 = new CodeExpression[] { parameterExp }; codeExpressionArray[0] = CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression2, methodName, codeExpressionArray1); codeExpressionArray[1] = CodeDomHelper.SingletonTypeManager(); statements.Add(new CodeMethodReturnStatement(new CodeCastExpression(returnType, CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression1, "ToXTypedElement", codeExpressionArray)))); } return(staticMethod); }
public static CodeMemberMethod CreateXRootMethod(string returnType, string methodName, string[][] paramList) { CodeTypeReference xRootType = new CodeTypeReference(returnType); CodeMemberMethod staticMethod = new CodeMemberMethod() { Name = methodName, Attributes = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.FamilyAndAssembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Public, ReturnType = xRootType }; CodeExpression[] parameterExp = new CodeExpression[(int)paramList.Length]; for (int i = 0; i < (int)paramList.Length; i++) { string[] paramRef = paramList[i]; staticMethod.Parameters.Add(CodeDomHelper.CreateParameter(paramRef[1], paramRef[0])); parameterExp[i] = new CodeVariableReferenceExpression(paramRef[1]); } CodeExpression rootExp = new CodeVariableReferenceExpression("root"); CodeExpression doc = new CodeFieldReferenceExpression(rootExp, "doc"); staticMethod.Statements.Add(new CodeVariableDeclarationStatement(xRootType, "root", new CodeObjectCreateExpression(xRootType, new CodeExpression[0]))); staticMethod.Statements.Add(new CodeAssignStatement(doc, CodeDomHelper.CreateMethodCall(new CodeTypeReferenceExpression("XDocument"), methodName, parameterExp))); CodeStatementCollection statements = staticMethod.Statements; CodeTypeReferenceExpression codeTypeReferenceExpression = new CodeTypeReferenceExpression("XTypedServices"); CodeExpression[] codePropertyReferenceExpression = new CodeExpression[] { new CodePropertyReferenceExpression(doc, "Root"), CodeDomHelper.SingletonTypeManager() }; statements.Add(new CodeVariableDeclarationStatement("XTypedElement", "typedRoot", CodeDomHelper.CreateMethodCall(codeTypeReferenceExpression, "ToXTypedElement", codePropertyReferenceExpression))); CodeStatementCollection codeStatementCollection = staticMethod.Statements; CodeBinaryOperatorExpression codeBinaryOperatorExpression = new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("typedRoot"), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null)); CodeStatement[] codeThrowExceptionStatement = new CodeStatement[1]; codePropertyReferenceExpression = new CodeExpression[] { new CodePrimitiveExpression("Invalid root element in xml document.") }; codeThrowExceptionStatement[0] = new CodeThrowExceptionStatement(new CodeObjectCreateExpression("LinqToXsdException", codePropertyReferenceExpression)); codeStatementCollection.Add(new CodeConditionStatement(codeBinaryOperatorExpression, codeThrowExceptionStatement)); staticMethod.Statements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(rootExp, "rootObject"), new CodeVariableReferenceExpression("typedRoot"))); staticMethod.Statements.Add(new CodeMethodReturnStatement(rootExp)); return(staticMethod); }