protected override void ImplementFSMMetaData() { Debug.Assert(this.clrTypeInfo.HasElementWildCard); if (this.fsmNameSource != null) { this.fsmNameSource.Reset(); } else { this.fsmNameSource = new StateNameSource(); } FSM fsm = this.clrTypeInfo.CreateFSM(this.fsmNameSource); this.decl.Members.Add(CodeDomHelper.CreateMemberField("validationStates", "FSM", MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Assembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Private, false)); CodeMemberMethod getFSM = CodeDomHelper.CreateInterfaceImplMethod("GetValidationStates", "IXMetaData", new CodeTypeReference("FSM")); getFSM.Statements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(null, "validationStates"))); this.decl.Members.Add(getFSM); CodeMemberMethod initFSM = CodeDomHelper.CreateMethod("InitFSM", MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Assembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Private, new CodeTypeReference()); FSMCodeDomHelper.CreateFSMStmt(fsm, initFSM.Statements); this.decl.Members.Add(initFSM); this.CreateStaticConstructor(); this.declItemsInfo.staticConstructor.Statements.Add(CodeDomHelper.CreateMethodCall(null, "InitFSM", null)); }
protected static CodeMemberMethod DefaultContentModel() { if (TypeBuilder.defaultContentModel == null) { CodeMemberMethod getContentModelMethod = CodeDomHelper.CreateInterfaceImplMethod("GetContentModel", "IXMetaData", new CodeTypeReference("ContentModelEntity")); getContentModelMethod.Statements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("ContentModelEntity"), "Default"))); Interlocked.CompareExchange <CodeMemberMethod>(ref TypeBuilder.defaultContentModel, getContentModelMethod, null); } return(TypeBuilder.defaultContentModel); }
protected override void ImplementContentModelMetaData() { CodeMemberMethod getContentModelMethod = null; if (!this.HasElementProperties) { getContentModelMethod = TypeBuilder.DefaultContentModel(); } else if (this.declItemsInfo.contentModelExpression == null) { getContentModelMethod = TypeBuilder.DefaultContentModel(); } else { CodeTypeReference cmType = new CodeTypeReference("ContentModelEntity"); this.declItemsInfo.staticConstructor.Statements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("contentModel"), this.declItemsInfo.contentModelExpression)); CodeMemberField contentModelField = new CodeMemberField(cmType, "contentModel"); CodeDomHelper.AddBrowseNever(contentModelField); contentModelField.Attributes = MemberAttributes.Abstract | MemberAttributes.Final | MemberAttributes.Static | MemberAttributes.Assembly | MemberAttributes.FamilyOrAssembly | MemberAttributes.Private; this.decl.Members.Add(contentModelField); getContentModelMethod = CodeDomHelper.CreateInterfaceImplMethod("GetContentModel", "IXMetaData", cmType, "contentModel"); } this.decl.Members.Add(getContentModelMethod); }