public virtual bool GetIsObject(CRflTyp aTyp) => this.GetIsEnum(aTyp) ? false : this.GetBase(aTyp).Length > 0 ? true : this.GetIsBlop(aTyp) ? true : false ;
private CodeTypeDeclaration NewCodeEnumTypeDecl(CRflTyp aEnumTyp) { var aEnumTypName = aEnumTyp.Name; var aCdTypeDecl = new CodeTypeDeclaration(aEnumTypName); aCdTypeDecl.IsEnum = true; var aFields = from aProperty in aEnumTyp.NamedProperties select new CodeMemberField(aEnumTypName, aProperty.Name); aCdTypeDecl.Members.AddRange(aFields.ToArray()); return(aCdTypeDecl); }
internal CRflProperty(CRflTyp aRflClass, string aName, CRflRow[] aRows) { this.DeclaringTyp = aRflClass; this.Name = aName; var aAttributesDic = new Dictionary <string, IEnumerable <CRflAttribute> >(aRows.Length); var aGroups = aRows.GroupBy(aRow => aRow.AttributeName); var aDic = aGroups.ToDictionary(aForKey => aForKey.Key, aForVal => (from aRow in aForVal select new CRflAttribute(this, aRow)).ToArray().AsEnumerable()); this.AttributesDic = aDic; }
private CodeStatement NewAddPrototypeStatement(CRflTyp aTyp) => new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), CSchema.AddTyp_Name, this.CodeDomBuilder.NewTypMetaInfoFieldRefExp(this.ModelInterpreter.GetTypName(aTyp, false))));
private CodeTypeDeclaration NewCodeEntityObjectTypeDecl(CRflTyp aRflTyp) { var aModel = aRflTyp.Model; var aSchemaClsNme = this.Tok.GetSchemaClassName(this.ModelInterpreter.GetSchema(aModel)); var aGetSchemaMthNme = this.Tok.GetGetSchemaFuncName(); // Class var aClassName = this.ModelInterpreter.GetTypName(aRflTyp, false); var aCdTypDecl = new CodeTypeDeclaration(aClassName); var aCdTypRef = new CodeTypeReference(aClassName); var aCdTypRefExp = new CodeTypeReferenceExpression(aCdTypRef); aCdTypDecl.BaseTypes.Add(this.NewCodeTypeReference(this.Tok.Trg_C_Eno_Nme)); var aGetPrpsMthdNme = this.Tok.Trg_N_GetPrps_Nme; var aGetPrpsMthActionArgNme = "aAddProperty"; var aCdGetPrpsMthdRefExp = new CodeMethodReferenceExpression(aCdTypRefExp, aGetPrpsMthdNme); // Typ.Field var aTypTypRef = this.CodeDomBuilder.NewCodeTypeRef <CTyp>(); var aTypFldNme = this.CodeDomBuilder.GetTypMetaInfoFieldName(aClassName); var aCdTypFldDcl = new CodeMemberField(aTypTypRef, aTypFldNme); var aCdTypeOfExp = this.CodeDomBuilder.NewTypeOfExpression(aClassName); var aCdNameOfExp = this.CodeDomBuilder.NewNameOTypeExpression(aClassName); var aGuid = this.ModelInterpreter.GetGuid(aRflTyp); var aCdGuidTypeRef = new CodeTypeReference(typeof(Guid)); var aCdGuidExp = new CodeObjectCreateExpression(aCdGuidTypeRef, new CodePrimitiveExpression(aGuid.ToString())); var aCdPrototypeExp = new CodeObjectCreateExpression(aCdTypRef, new CodePrimitiveExpression(null)); var aCdAddPrpsMthdRef = new CodeMethodReferenceExpression(aCdTypRefExp, aGetPrpsMthdNme); aCdTypFldDcl.Attributes = MemberAttributes.Public | MemberAttributes.Static ; aCdTypFldDcl.InitExpression = new CodeObjectCreateExpression(aTypTypRef, aCdTypeOfExp, aCdGuidExp, aCdGetPrpsMthdRefExp); aCdTypDecl.Members.Add(aCdTypFldDcl); var aTypFldRefExp = new CodeFieldReferenceExpression(aCdTypRefExp, aTypFldNme); // Typ.Property._Static var aTypPrpNme = this.CodeDomBuilder.GetTypMetaInfoPropName(aClassName); var aCdTypPrp = new CodeMemberProperty(); aCdTypPrp.Name = aTypPrpNme; aCdTypPrp.Attributes = MemberAttributes.Static | MemberAttributes.Public ; aCdTypPrp.Type = aTypTypRef; aCdTypPrp.GetStatements.Add(new CodeMethodReturnStatement(aTypFldRefExp)); aCdTypPrp.HasGet = true; aCdTypDecl.Members.Add(aCdTypPrp); var aCdTypPrpRefExp = new CodePropertyReferenceExpression(aCdTypRefExp, aTypPrpNme); // Typ.Property.Get.Override var aOverrideTypPrpName = nameof(CObject.Typ); var aCdOverrideTypPrp = new CodeMemberProperty(); aCdOverrideTypPrp.Attributes = MemberAttributes.Public | MemberAttributes.Override ; aCdOverrideTypPrp.Type = aTypTypRef; aCdOverrideTypPrp.Name = aOverrideTypPrpName; aCdOverrideTypPrp.GetStatements.Add(new CodeMethodReturnStatement(aCdTypPrpRefExp)); aCdOverrideTypPrp.HasGet = true; aCdTypDecl.Members.Add(aCdOverrideTypPrp); // Constructor var aCodeConstructor = new CodeConstructor(); aCodeConstructor.Attributes = MemberAttributes.Public; var aStorageArgName = "aStorage"; aCodeConstructor.Parameters.Add(new CodeParameterDeclarationExpression(this.NewCodeTypeReference(this.Tok.Trg_C_Str_Nme), aStorageArgName)); aCodeConstructor.BaseConstructorArgs.Add(new CodeVariableReferenceExpression(aStorageArgName)); aCdTypDecl.Members.Add(aCodeConstructor); // Properties var aNmePrps = aRflTyp.NamedProperties; foreach (var aPrp in aNmePrps) { this.AddMembers(aRflTyp, aCdTypDecl, aPrp); } // CObject.GetProperties var aActionOfPropertyType = typeof(Action <CRefMetaInfo>); var aCdActionOfPropertyTypRef = new CodeTypeReference(aActionOfPropertyType); var aCdGetPrpsMth = new CodeMemberMethod(); aCdGetPrpsMth.Name = aGetPrpsMthdNme; aCdGetPrpsMth.Attributes = MemberAttributes.Static | MemberAttributes.Private ; aCdGetPrpsMth.Parameters.Add(new CodeParameterDeclarationExpression(aCdActionOfPropertyTypRef, aGetPrpsMthActionArgNme)); foreach (var aNmePrp in aNmePrps) { var aPrpNme = aNmePrp.Name; var aMtaPrpNme = this.Tok.GetRelationyMetaInfoPropertyName(aPrpNme); var aMtaPrpRefExp = new CodePropertyReferenceExpression(aCdTypRefExp, aMtaPrpNme); var aArgRefExp = new CodeArgumentReferenceExpression(aGetPrpsMthActionArgNme); var aCdCallExpnew = new CodeMethodInvokeExpression(aArgRefExp, nameof(Action.Invoke), aMtaPrpRefExp); aCdGetPrpsMth.Statements.Add(aCdCallExpnew); } aCdTypDecl.Members.Add(aCdGetPrpsMth); return(aCdTypDecl); }
private void AddMembers(CRflTyp aPTyp, CodeTypeDeclaration aCdTypDcl, CRflProperty aProperty) { var aModel = aProperty.Model; var aModelInterpreter = this.ModelInterpreter; var aCodeDomBuilder = this.CodeDomBuilder; var aPTypNme = this.ModelInterpreter.GetTypName(aPTyp, true); var aCdPTypRef = new CodeTypeReference(aPTypNme); var aCdPTypRefExp = new CodeTypeReferenceExpression(aCdPTypRef); var aCTyp = this.ModelInterpreter.GetReturnTyp(aProperty); var aPrpNme = aProperty.Name; string aMtaFldTypNme; var aMtaPrpNme = this.Tok.GetRelationyMetaInfoPropertyName(aPrpNme); var aMtaPrpRefExp = new CodePropertyReferenceExpression(aCdPTypRefExp, aMtaPrpNme); var aCTypRef = this.CodeDomBuilder.NewCodeTypeRef(aCTyp); // Relations-Objects var aCrd = this.ModelInterpreter.GetCardinality(aProperty); var aRelTypName = this.ModelInterpreter.GetClassName(aCrd); var aRelSystemType = CRef.GetRefClass(aCrd); var aCdRTypRef = new CodeTypeReference(aRelTypName, this.CodeDomBuilder.NewCodeTypeRef(aPTyp), aCTypRef); var aCtorArgs1 = new CodeExpression[] { new CodeThisReferenceExpression(), aMtaPrpRefExp }; var aCtorArgsBuildAttribIsDefined = aRelSystemType.IsNullRef() ? false : aRelSystemType.IsDefined(typeof(CGenCtorArgsBuilderAttribute), true); var aWriteOnlyBySystem = aProperty.Interpret(() => bool.Parse(aProperty.GetAttributeValue(this.Tok.Trg_P_A_WriteOnlyBySystem, false.ToString))); var aCtorArgs2 = aWriteOnlyBySystem ? new CodeExpression[] { new CodeObjectCreateExpression(typeof(CAccessKey)) } : new CodeExpression[] { }; var aCtorArgBuilderAttrib = aCtorArgsBuildAttribIsDefined ? aRelSystemType.GetCustomAttribute <CGenCtorArgsBuilderAttribute>(true) : default(CGenCtorArgsBuilderAttribute); var aCtorArgs3 = aCtorArgBuilderAttrib.IsNullRef() ? new CodeExpression[] { } : aCtorArgBuilderAttrib.NewCtorArgs(aModelInterpreter, aCodeDomBuilder, aProperty); var aCtorArgs = aCtorArgs1.Concat(aCtorArgs2).Concat(aCtorArgs3); var aNewExp = new CodeObjectCreateExpression(aCdRTypRef, aCtorArgs.ToArray()); var aIsClass = true; var aLazyPrp = this.CodeDomBuilder.NewLazyLoadPrperty(aCdRTypRef, aIsClass, this.ModelInterpreter.GetEntityRefPropertyName(aProperty), aNewExp, MemberAttributes.Public | MemberAttributes.Final); aCdTypDcl.Members.Add(aLazyPrp.Item1); aCdTypDcl.Members.Add(aLazyPrp.Item2); var aCdPrp = aLazyPrp.Item1; aMtaFldTypNme = this.Tok.GeRelationMetaInfoTypName(aRelTypName); // Property.Attributes from System aCdPrp.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(CTargetTypeAttribute)), new CodeAttributeArgument(new CodeTypeOfExpression(aCTypRef)))); // Property.Attributes from Model var aCdAs = this.CodeDomBuilder.NewCodeAttributeDecls(aProperty, this.ModelInterpreter); aCdPrp.CustomAttributes.AddRange(aCdAs.ToArray()); // Property.NetaInfo.Field var aMtaFldNme = this.Tok.GetRelationMetaInfoFieldName(aPrpNme); //aMtaFldTypNme = this.Tok.Trg_C_Mta_P_Fld_Nme; var aCdMtaFldTypRef = new CodeTypeReference(aMtaFldTypNme); var aCdMtaPrpFldDcl = new CodeMemberField(aMtaFldTypNme, aMtaFldNme); var aCdMtaPrpInitExp = new CodeObjectCreateExpression(aCdMtaFldTypRef, this.CodeDomBuilder.NewTypeOfExpression(aPTypNme), this.CodeDomBuilder.NewNameOfPrpertyExpression(aPrpNme) ); aCdMtaPrpFldDcl.Type = aCdMtaFldTypRef; aCdMtaPrpFldDcl.Attributes = MemberAttributes.Static | MemberAttributes.Private ; aCdMtaPrpFldDcl.InitExpression = aCdMtaPrpInitExp; aCdTypDcl.Members.Add(aCdMtaPrpFldDcl); var aCdMtaFldRefExp = new CodeFieldReferenceExpression(aCdPTypRefExp, aMtaFldNme); // Property.MetaInfo.Property var aCdMtaPrp = new CodeMemberProperty(); aCdMtaPrp.Name = aMtaPrpNme; aCdMtaPrp.Type = aCdMtaFldTypRef; aCdMtaPrp.Attributes = MemberAttributes.Static | MemberAttributes.Public ; aCdMtaPrp.HasGet = true; aCdMtaPrp.GetStatements.Add(new CodeMethodReturnStatement(aCdMtaFldRefExp)); aCdTypDcl.Members.Add(aCdMtaPrp); }
public virtual CodeTypeReference NewCodeTypeRef(CRflTyp aTyp) => this.NewCodeTypeRefFromModel(this.Idl.GetTypName(aTyp, true));
public virtual Guid GetGuid(CRflTyp aTyp) => aTyp.GetAttributeValue(this.Tok.Mdl_T_A_Guid_Nme).DefaultIfEmpty <Guid>(s => new Guid(s), () => default(Guid));
public virtual string GetInit(CRflTyp aTyo) => aTyo.GetAttributeValue(this.Tok.Mdl_T_A_Nme_Init);
public virtual bool GetIsBlop(CRflTyp aTyp) => aTyp.Name == nameof(CBlop);
public virtual bool GetGenerate(CRflTyp aTyp) => aTyp.Interpret(() => bool.Parse(aTyp.GetAttributeValue(this.Tok.Mdl_T_A_Generate, () => true.ToString())));
public virtual bool GetIsEnum(CRflTyp aTyp) => this.GetBase(aTyp).Equals(nameof(Enum));
public virtual string GetBase(CRflTyp aRflClass) => aRflClass.GetAttributeValue(this.Tok.Mdl_T_A_Nme_Base);
public virtual string GetTypName(CRflTyp aRflClass, bool aWithNamespace) => aWithNamespace ? this.GetClrNamespace(aRflClass) + "." + aRflClass.Name : aRflClass.Name;
public virtual string GetClrNamespace(CRflTyp aTyp) => aTyp.GetAttributeValue(this.Tok.Mdl_T_A_Nme_ClrNs, () => this.GetClrNamespace(aTyp.Model));