Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }