internal static string ToSignature(this IPropertySymbol propertySymbol) { var propertyName = propertySymbol.Name; var propertyTypeName = propertySymbol.Type.SimplifyTypeName(); var accessModifiers = propertySymbol.GetAccessModifiers(); var propertySignature = new StringBuilder($"{accessModifiers} override ", InitialCapacity); propertySignature.Append($"{propertyTypeName} {propertyName} "); var propertySugar = PropertySugar(); propertySignature.Append(propertySugar); return(propertySignature.ToString()); string PropertySugar() { var property = "{ "; if (propertySymbol.IsReadOnly) { var getModifiers = propertySymbol.GetMethod.GetAccessModifiers(); if (!string.Equals(accessModifiers, getModifiers, StringComparison.Ordinal)) { property += $"{getModifiers} "; } property += "get; }"; } else if (propertySymbol.IsWriteOnly) { property += "private get; "; var setModifiers = propertySymbol.SetMethod.GetAccessModifiers(); if (!string.Equals(accessModifiers, setModifiers, StringComparison.Ordinal)) { property += $"{setModifiers} "; } property += "set; }"; } else { var getModifiers = propertySymbol.GetMethod.GetAccessModifiers(); if (!string.Equals(accessModifiers, getModifiers, StringComparison.Ordinal)) { property += $"{getModifiers} "; } property += "get; "; var setModifiers = propertySymbol.SetMethod.GetAccessModifiers(); if (!string.Equals(accessModifiers, setModifiers, StringComparison.Ordinal)) { property += $"{setModifiers} "; } property += "set; }"; } return(property); } }