Example #1
0
        private string GetPropertyTypeName(PropertyInformation propertyInfo)
        {
            var propertyTypeSymbol = propertyInfo.Property.Type;

            if (propertyTypeSymbol is INamedTypeSymbol namedType && namedType.IsGenericType)
            {
                return(CreateGenericTypeWithParameters(propertyInfo));
            }

            return(ConvertToNullableIfRequired(propertyInfo, propertyTypeSymbol));
        }
Example #2
0
        private string ConvertToNullableIfRequired(PropertyInformation propertyInfo, ITypeSymbol typeSymbol)
        {
            string genericTypeParam = GetPropertyTypeName(typeSymbol).TypeName;

            if (typeSymbol.IsValueType && typeSymbol.SpecialType != SpecialType.System_Nullable_T && typeSymbol.NullableAnnotation != NullableAnnotation.Annotated)
            {
                propertyInfo.IsConvertedToNullableType = true;
                genericTypeParam = $"System.Nullable<{genericTypeParam}>";
            }
            if (!typeSymbol.IsValueType && typeSymbol.SpecialType != SpecialType.System_Nullable_T)
            {
                genericTypeParam = $"{genericTypeParam}?";
            }

            return(genericTypeParam);
        }
Example #3
0
        private void BuildPropery(BuilderState state, PropertyInformation propertyInfo, int propertyId)
        {
            state.ToProcessTypeSymbols.Add(propertyInfo.Property.Type);
            string fieldName        = Casing.PrefixUnderscoreCamelCase(propertyInfo.Property.Name);
            string propertyTypeName = GetPropertyTypeName(propertyInfo);

            state.AppendLine($"private {propertyTypeName} {fieldName};");
            BuildAttributes(state, propertyInfo.Property.GetAttributes());
            state.AppendLine($"public {propertyTypeName} {propertyInfo.Property.Name}");
            state.AppendLine("{");
            var getterSetter = state.IncrementIdentation();

            getterSetter.AppendLine($"get {{ return {fieldName}; }}");
            getterSetter.AppendLine("set");
            getterSetter.AppendLine("{");
            var setterBody = getterSetter.IncrementIdentation();

            setterBody.AppendLine($"Properties[{propertyId}] = true;");
            setterBody.AppendLine($"{fieldName} = value;");
            getterSetter.AppendLine("}");
            state.AppendLine("}");
        }