Exemplo n.º 1
0
        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);
            }
        }