private void WriteProperty(StringBuilder sb, TypeModel type, PropertyModel property, string mixinClrName = null) { var mixinStatic = mixinClrName != null; sb.Append("\n"); if (property.Errors != null) { sb.Append("\t\t/*\n"); sb.Append("\t\t * THIS PROPERTY CANNOT BE IMPLEMENTED, BECAUSE:\n"); sb.Append("\t\t *\n"); var first = true; foreach (var error in property.Errors) { if (first) { first = false; } else { sb.Append("\t\t *\n"); } foreach (var s in SplitError(error)) { sb.Append("\t\t * "); sb.Append(s); sb.Append("\n"); } } sb.Append("\t\t *\n"); sb.Append("\n"); } // Adds xml summary to each property containing // property name and property description if (!string.IsNullOrWhiteSpace(property.Name) || !string.IsNullOrWhiteSpace(property.Description)) { sb.Append("\t\t///<summary>\n"); if (!string.IsNullOrWhiteSpace(property.Description)) { sb.AppendFormat("\t\t/// {0}: {1}\n", XmlCommentString(property.Name), XmlCommentString(property.Description)); } else { sb.AppendFormat("\t\t/// {0}\n", XmlCommentString(property.Name)); } sb.Append("\t\t///</summary>\n"); } WriteGeneratedCodeAttribute(sb, "\t\t"); sb.AppendFormat("\t\t[ImplementPropertyType(\"{0}\")]\n", property.Alias); if (mixinStatic) { sb.Append("\t\tpublic "); WriteClrType(sb, property.ClrTypeName); sb.AppendFormat(" {0} => {1}(this);\n", property.ClrName, MixinStaticGetterName(property.ClrName)); } else { sb.Append("\t\tpublic "); WriteClrType(sb, property.ClrTypeName); sb.AppendFormat(" {0} => this.Value", property.ClrName); if (property.ModelClrType != typeof(object)) { sb.Append("<"); WriteClrType(sb, property.ClrTypeName); sb.Append(">"); } sb.AppendFormat("(\"{0}\");\n", property.Alias); } if (property.Errors != null) { sb.Append("\n"); sb.Append("\t\t *\n"); sb.Append("\t\t */\n"); } if (!mixinStatic) { return; } var mixinStaticGetterName = MixinStaticGetterName(property.ClrName); //if (type.StaticMixinMethods.Contains(mixinStaticGetterName)) return; sb.Append("\n"); if (!string.IsNullOrWhiteSpace(property.Name)) { sb.AppendFormat("\t\t/// <summary>Static getter for {0}</summary>\n", XmlCommentString(property.Name)); } WriteGeneratedCodeAttribute(sb, "\t\t"); sb.Append("\t\tpublic static "); WriteClrType(sb, property.ClrTypeName); sb.AppendFormat(" {0}(I{1} that) => that.Value", mixinStaticGetterName, mixinClrName); if (property.ModelClrType != typeof(object)) { sb.Append("<"); WriteClrType(sb, property.ClrTypeName); sb.Append(">"); } sb.AppendFormat("(\"{0}\");\n", property.Alias); }