Beispiel #1
0
        private static void CreateConstructorFromRows(CodeTypeDeclaration classType, TableInfo tableInfo)
        {
            if (string.IsNullOrEmpty(tableInfo.ParentName) == true)
            {
                return;
            }

            var cc = new CodeConstructor();

            cc.Attributes = MemberAttributes.Public;

            var codeTypeRef  = tableInfo.GetRowCodeType(CodeType.Pointer);
            var arrayTypeRef = new CodeTypeReference(codeTypeRef, 1);

            arrayTypeRef.SetCodeType(CodeType.Const | CodeType.Reference);
            cc.Parameters.Add(typeof(string), "name");
            cc.Parameters.Add(arrayTypeRef, 1, "rows");
            //cc.BaseConstructorArgs.Add("rows");

            {
                var name         = new CodeVariableReferenceExpression("name");
                var rows         = new CodeVariableReferenceExpression("rows");
                var readFromRows = new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "ReadFromRows");
                var methodInvoke = new CodeMethodInvokeExpression(readFromRows, name, rows);

                cc.Statements.Add(methodInvoke);
            }

            classType.Members.Add(cc);
        }
Beispiel #2
0
        public static CodeTypeReference GetParentRowCodeType(this TableInfo tableInfo, CodeType codeType)
        {
            var codeTypeRef = new CodeTypeReference(tableInfo.GetParentRowClassName());

            codeTypeRef.SetCodeType(codeType);
            return(codeTypeRef);
        }
Beispiel #3
0
        public static CodeTypeReference GetCodeType(this TableInfo tableInfo, string tableNamespace, CodeType codeType)
        {
            var codeTypeRef = new CodeTypeReference(tableNamespace + "::" + tableInfo.GetClassName());

            codeTypeRef.SetCodeType(codeType);
            return(codeTypeRef);
        }
        private static void CreateLoadFromFile(CodeTypeDeclaration classType, CodeGenerationInfo generationInfo)
        {
            var cc = new CodeMemberMethod
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Final,
                Name       = "Load"
            };

            var codeTypeRef = new CodeTypeReference(typeof(string));

            codeTypeRef.SetCodeType(CodeType.Reference | CodeType.Const);
            cc.Parameters.Add(codeTypeRef, "filename");
            cc.Parameters.Add(new CodeTypeReference(typeof(bool)), "verifyRevision");

            var paramExp        = new CodeVariableReferenceExpression("filename");
            var readerTypeRef   = new CodeTypeReferenceExpression(string.Join("::", generationInfo.ReaderNamespace, "CremaReader"));
            var readerInvokeExp = new CodeMethodInvokeExpression(readerTypeRef, "ReadFromFile", paramExp);

            var methodInvokeExp = new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), "Load", readerInvokeExp, new CodeVariableReferenceExpression("verifyRevision"));

            cc.Statements.Add(methodInvokeExp);
            //cc.ChainedConstructorArgs.Add(methodInvokeExp);
            //cc.ChainedConstructorArgs.Add(new CodeVariableReferenceExpression("verifyRevision"));

            classType.Members.Add(cc);
        }
Beispiel #5
0
        private static void CreateSetChildsMethod(CodeTypeDeclaration classType, TableInfo tableInfo, CodeGenerationInfo generationInfo)
        {
            foreach (var item in generationInfo.GetChilds(tableInfo))
            {
                var cmm = new CodeMemberMethod();
                cmm.Attributes = MemberAttributes.FamilyAndAssembly | MemberAttributes.Static;
                cmm.Name       = tableInfo.TableName + "Set" + item.TableName;
                cmm.Parameters.Add(tableInfo.GetRowCodeType(CodeType.Pointer), "target");
                var arrayType = new CodeTypeReference(item.GetRowCodeType(CodeType.Pointer), 1);
                arrayType.SetCodeType(CodeType.Const | CodeType.Reference);
                cmm.Parameters.Add(arrayType, "childs");

                {
                    var methodRefExp = new CodeMethodReferenceExpression(null, "SetParent");
                    //methodRefExp.TypeArguments.Add(tableInfo.GetRowCodeType());
                    //methodRefExp.TypeArguments.Add(item.GetRowCodeType());

                    var methodInvokeExp = new CodeMethodInvokeExpression(methodRefExp, new CodeVariableReferenceExpression("target"), new CodeVariableReferenceExpression("childs"));

                    cmm.Statements.AddExpression(methodInvokeExp);
                }

                {
                    var target         = new CodeVariablePointerExpression("target");
                    var childs         = new CodeVariableReferenceExpression("childs");
                    var targetField    = item.GetFieldExpression(target);
                    var targetInstance = new CodeObjectCreateExpression(item.GetCodeType(CodeType.None), childs);
                    cmm.Statements.AddAssign(targetField, targetInstance);
                }

                classType.Members.Add(cmm);
            }
        }
Beispiel #6
0
        public static CodeTypeReference GetPropertyType(this ColumnInfo columnInfo)
        {
            CodeTypeReference codeTypeRef = null;

            if (CremaDataTypeUtility.IsBaseType(columnInfo.DataType) == true)
            {
                var runtimeType = CremaDataTypeUtility.GetType(columnInfo.DataType);
                codeTypeRef = new CodeTypeReference(runtimeType);
                if (runtimeType == typeof(string))
                {
                    codeTypeRef.SetCodeType(CodeType.Reference | CodeType.Const);
                }
            }
            else
            {
                var itemName = new ItemName(columnInfo.DataType);
                codeTypeRef = Utility.GenerateCodeType(TypeNamespace, itemName.Name);
            }
            return(codeTypeRef);
        }