Esempio n. 1
0
 private void SetReadWriteProperties(BuilderState state)
 {
     for (int i = 0; i < state.TypeInfo.Properties.Count; i++)
     {
         var currentProperty = state.TypeInfo.Properties[i].Property;
         if (!IsInitOnlyProperty(currentProperty))
         {
             state.AppendLine($"if (Properties[{i}])");
             if (GeneratedTypeFilter.IsGeneratableType(currentProperty.Type))
             {
                 state.IncrementIdentation().AppendLine($"input.{currentProperty.Name} = {currentProperty.Name}?.ApplyPatch(input.{currentProperty.Name});");
             }
             else if (state.TypeInfo.Properties[i].IsGenericDictionary)
             {
                 state.IncrementIdentation().AppendLine($"input.{currentProperty.Name} ??= new();");
             }
             else if (state.TypeInfo.Properties[i].IsConvertedToNullableType)
             {
                 state.IncrementIdentation().AppendLine($"input.{currentProperty.Name} = {currentProperty.Name}.HasValue ? {currentProperty.Name}.Value : default;");
             }
             else
             {
                 state.IncrementIdentation().AppendLine($"input.{currentProperty.Name} = {currentProperty.Name};");
             }
         }
     }
 }
Esempio n. 2
0
 private (bool IsGeneratedType, string TypeName) GetPropertyTypeName(ITypeSymbol propertyTypeSymbol)
 {
     if (GeneratedTypeFilter.IsGeneratableType(propertyTypeSymbol))
     {
         return(true, NameBuilder.GetFullTypeName(propertyTypeSymbol));
     }
     return(false, propertyTypeSymbol.ToDisplayString(GeneratedTypeFilter.SymbolFormat));
 }
Esempio n. 3
0
 private void PopulateDictionaryProperties(BuilderState state)
 {
     for (int i = 0; i < state.TypeInfo.Properties.Count; i++)
     {
         var currentProperty = state.TypeInfo.Properties[i].Property;
         if (!GeneratedTypeFilter.IsGeneratableType(currentProperty.Type) && state.TypeInfo.Properties[i].IsGenericDictionary)
         {
             PopulateDictionary(state, state.TypeInfo.Properties[i]);
         }
     }
 }
Esempio n. 4
0
        private void SetInitOnlyProperties(BuilderState state)
        {
            if (!state.TypeInfo.Properties.Any(x => IsInitOnlyProperty(x.Property)))
            {
                return;
            }
            CallConstructIfEmpty(state, "var tmp =", leaveOpen: true);
            state.AppendLine("{");
            var initializerState = state.IncrementIdentation();

            for (int i = 0; i < state.TypeInfo.Properties.Count; i++)
            {
                var currentProperty = state.TypeInfo.Properties[i].Property;
                if (IsInitOnlyProperty(currentProperty))
                {
                    if (GeneratedTypeFilter.IsGeneratableType(currentProperty.Type))
                    {
                        initializerState.AppendLine($"{currentProperty.Name} = Properties[{i}] ? this.{currentProperty.Name}?.ApplyPatch(input.{currentProperty.Name}) : input.{currentProperty.Name},");
                    }
                    else if (state.TypeInfo.Properties[i].IsGenericDictionary)
                    {
                        initializerState.AppendLine($"{currentProperty.Name} = Properties[{i}] && input.{currentProperty.Name} == null ? new() : input.Values,");
                    }
                    else if (state.TypeInfo.Properties[i].IsConvertedToNullableType)
                    {
                        initializerState.AppendLine($"{currentProperty.Name} = Properties[{i}] ? ({currentProperty.Name}.HasValue ? this.{currentProperty.Name}.Value : default) : input.{currentProperty.Name},");
                    }
                    else
                    {
                        initializerState.AppendLine($"{currentProperty.Name} = Properties[{i}] ? this.{currentProperty.Name} : input.{currentProperty.Name},");
                    }
                }
                else
                {
                    // Copy old property values onto the new object
                    initializerState.AppendLine($"{currentProperty.Name} = input.{currentProperty.Name},");
                }
            }
            state.AppendLine("};");
            state.AppendLine("input = tmp;");
        }