protected override string GetPropertyDeclaration(PropertyDefinition property) { string getVisible = null; if (DocUtils.IsAvailablePropertyMethod(property.GetMethod)) { getVisible = AppendVisibility(new StringBuilder(), property.GetMethod)?.ToString(); } string setVisible = null; if (DocUtils.IsAvailablePropertyMethod(property.SetMethod)) { setVisible = AppendVisibility(new StringBuilder(), property.SetMethod)?.ToString(); } if (setVisible == null && getVisible == null) { return(null); } bool isField = GetFSharpFlags(property.CustomAttributes).Any(i => i == SourceConstructFlags.Field); StringBuilder buf = new StringBuilder(); if (IsRecord(property.DeclaringType)) { AppendRecordParameter(buf, property); return(buf.ToString()); } if (IsModule(property.DeclaringType)) { buf.Append($"{GetName(property.DeclaringType)}."); } else { if (isField) { buf.Append("val "); } else { buf.Append("member this."); } } buf.Append(property.Name); if (property.Parameters.Count != 0) { buf.Append("("); AppendParameters(buf, property.GetMethod ?? property.SetMethod, property.Parameters); buf.Append(")"); } buf.Append(" : "); buf.Append(GetTypeName(property.PropertyType)); if (getVisible != null && setVisible != null) { buf.Append(" with get, set"); } return(buf.ToString()); }
protected override string GetPropertyDeclaration(PropertyDefinition property) { string getVisible = null; if (DocUtils.IsAvailablePropertyMethod(property.GetMethod)) { getVisible = AppendVisibility(new StringBuilder(), property.GetMethod).ToString(); } string setVisible = null; if (DocUtils.IsAvailablePropertyMethod(property.SetMethod)) { setVisible = AppendVisibility(new StringBuilder(), property.SetMethod).ToString(); } if (setVisible == null && getVisible == null) { return(null); } StringBuilder buf = new StringBuilder(); IEnumerable <MemberReference> defs = property.DeclaringType.GetDefaultMembers(); bool indexer = false; foreach (MemberReference mi in defs) { if (mi == property) { indexer = true; break; } } if (indexer) { buf.Append("Default "); } if (getVisible != null && (setVisible == null || (setVisible != null && getVisible == setVisible))) { buf.Append(getVisible); } else if (setVisible != null && getVisible == null) { buf.Append(setVisible); } else { buf.Append("Public"); } // Pick an accessor to use for static/virtual/override/etc. checks. var method = property.SetMethod; if (method == null) { method = property.GetMethod; } string modifiers = String.Empty; if (method.IsStatic && !IsModule(method.DeclaringType)) { modifiers += " Shared"; } if (method.IsVirtual && !method.IsAbstract) { if ((method.Attributes & MethodAttributes.NewSlot) != 0) { modifiers += " Overridable"; } else { modifiers += " Overrides"; } } TypeDefinition declDef = (TypeDefinition)method.DeclaringType; if (method.IsAbstract && !declDef.IsInterface) { modifiers += " MustOverride"; } if (method.IsFinal) { modifiers += " NotOverridable"; } if (modifiers == " MustOverride NotOverridable") { modifiers = ""; } if (modifiers == " Overridable NotOverridable") { modifiers = ""; } buf.Append(modifiers).Append(' '); if (getVisible != null && setVisible == null) { buf.Append("ReadOnly "); } buf.Append("Property "); buf.Append(property.Name.Split('.').Last()); if (property.Parameters.Count != 0) { AppendParameters(buf, method, property.Parameters, '(', ')'); } buf.Append(" As "); buf.Append(GetTypeName(property.PropertyType, new DynamicParserContext(property))); if (DocUtils.IsExplicitlyImplemented(property.GetMethod)) { TypeReference iface; MethodReference ifaceMethod; DocUtils.GetInfoForExplicitlyImplementedMethod(method, out iface, out ifaceMethod); buf.Append(" Implements ") .Append(new VBMemberFormatter(this.TypeMap).GetName(iface)) .Append('.') .Append(DocUtils.GetPropertyName(property, NestedTypeSeparator).Split('.').Last()); } return(buf.ToString()); }