CodeTypeMember[] GenerateProperty(PropertyData property, ClassData classData) { // CodeTypeReference propertyCodeType = null; if (!GetCodeTypeReferenceFromXamlType(property.Type, classData, out propertyCodeType)) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.TaskCannotResolvePropertyType( XamlBuildTaskServices.GetFullTypeName(property.Type), property.Name)), classData.FileName); } if (!this.codeDomProvider.IsValidIdentifier(property.Name)) { throw FxTrace.Exception.AsError( new InvalidOperationException(SR.InvalidIdentifiers(property.Name)), classData.FileName); } // private <%= property.Type %> _<%= property.Name %>; // CodeMemberField fieldMember = new CodeMemberField() { Attributes = MemberAttributes.Private, Name = "_" + property.Name, Type = propertyCodeType }; // public <%= property.Type %> <%= property.Name %> { // get { return this._<%= property.Name %>; } // set { this._<%= property.Name %> = value; } // } // CodeMemberProperty propertyMember = new CodeMemberProperty() { Attributes = MemberAttributes.Final, Name = property.Name, Type = propertyCodeType, GetStatements = { new CodeMethodReturnStatement(CodeThis.Field(fieldMember.Name)) }, SetStatements = { new CodeAssignStatement() { Left = CodeThis.Field(fieldMember.Name), Right = new CodeVariableReferenceExpression("value") } } }; propertyMember.Attributes |= GetMemberAttributes(property.Visibility); if (property.Attributes != null && property.Attributes.Count > 0) { CodeAttributeDeclarationCollection attributeCollection = GetAttributeDeclarations(property.Attributes, classData); if (attributeCollection != null && attributeCollection.Count > 0) { propertyMember.CustomAttributes.AddRange(attributeCollection); } } return new CodeTypeMember[] { fieldMember, propertyMember }; }
PropertyData LoadProperty(XamlReader xamlReader) { if (xamlReader == null) { throw FxTrace.Exception.ArgumentNull("xamlReader"); } PropertyData property = new PropertyData(); while (xamlReader.Read()) { if (xamlReader.NodeType == XamlNodeType.StartMember) { XamlMember member = xamlReader.Member; switch (member.Name) { case "Name": property.Name = ReadValueAsString(xamlReader.ReadSubtree()); break; case "Type": property.Type = ReadPropertyType(xamlReader.ReadSubtree()); break; case "Attributes": foreach (AttributeData attribute in ReadAttributesCollection(xamlReader.ReadSubtree())) { property.Attributes.Add(attribute); } break; case "Modifier": string propertyModifier = ReadValueAsString(xamlReader.ReadSubtree()); property.Visibility = XamlBuildTaskServices.GetMemberVisibility(propertyModifier); break; default: // Ignore AttachedProperties on property if (!member.IsAttachable) { throw FxTrace.Exception.AsError(LogInvalidOperationException(xamlReader, SR.UnknownPropertyMember(member.Name))); } break; } } } if (string.IsNullOrEmpty(property.Name)) { throw FxTrace.Exception.AsError(LogInvalidOperationException(xamlReader, SR.PropertyNameRequired)); } if (property.Type == null) { throw FxTrace.Exception.AsError(LogInvalidOperationException(xamlReader, SR.PropertyTypeRequired(property.Name))); } return property; }