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); }
public static CodeTypeReference GetParentRowCodeType(this TableInfo tableInfo, CodeType codeType) { var codeTypeRef = new CodeTypeReference(tableInfo.GetParentRowClassName()); codeTypeRef.SetCodeType(codeType); return(codeTypeRef); }
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); }
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); } }
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); }