internal static (SerializableMember?Member, ImmutableArray <Diagnostic> Diagnostics) ForProperty( Compilation compilation, AttributedMembers attrMembers, SerializerTypes types, INamedTypeSymbol serializingType, IPropertySymbol prop, ImmutableArray <AttributeSyntax> attrs ) { var diags = ImmutableArray <Diagnostic> .Empty; var propLoc = prop.Locations.FirstOrDefault(); if (prop.GetMethod == null) { var diag = Diagnostics.NoGetterOnSerializableProperty(propLoc); diags = diags.Add(diag); } if (prop.Parameters.Any()) { var diag = Diagnostics.SerializablePropertyCannotHaveParameters(propLoc); diags = diags.Add(diag); } var name = prop.Name; var attrName = Utils.GetNameFromAttributes(attrMembers, propLoc, attrs, ref diags); name = attrName ?? name; var getter = new Getter(prop); int?order = Utils.GetOrderFromAttributes(attrMembers, propLoc, types.Framework, types.OurTypes.SerializerMemberAttribute, attrs, ref diags); var emitDefaultValue = true; var attrEmitDefaultValue = GetEmitDefaultValueFromAttributes(attrMembers, propLoc, attrs, ref diags); emitDefaultValue = attrEmitDefaultValue ?? emitDefaultValue; var formatter = GetFormatter(compilation, attrMembers, types, prop.Type, propLoc, attrs, ref diags); var shouldSerialize = GetShouldSerialize(compilation, attrMembers, types, serializingType, propLoc, attrs, ref diags); // only do this for properties shouldSerialize ??= InferDefaultShouldSerialize(attrMembers, types, serializingType, prop.Name, attrs, propLoc, ref diags); return(MakeMember(propLoc, types, name, getter, formatter, shouldSerialize, emitDefaultValue, order, diags)); }