internal static (SerializableMember?Member, ImmutableArray <Diagnostic> Diagnostics) ForMethod( Compilation compilation, AttributedMembers attrMembers, SerializerTypes types, INamedTypeSymbol serializingType, IMethodSymbol mtd, ImmutableArray <AttributeSyntax> attrs ) { var diags = ImmutableArray <Diagnostic> .Empty; var mtdLoc = mtd.Locations.FirstOrDefault(); var attrName = Utils.GetNameFromAttributes(attrMembers, mtdLoc, attrs, ref diags); if (attrName == null) { var diag = Diagnostics.SerializableMemberMustHaveNameSetForMethod(mtdLoc, mtd); diags = diags.Add(diag); attrName = "--UNKNOWN--"; } var getter = GetGetterForMethod(compilation, types, serializingType, mtd, mtdLoc, ref diags); int?order = Utils.GetOrderFromAttributes(attrMembers, mtdLoc, types.Framework, types.OurTypes.SerializerMemberAttribute, attrs, ref diags); var emitDefaultValue = true; var attrEmitDefaultValue = GetEmitDefaultValueFromAttributes(attrMembers, mtdLoc, attrs, ref diags); emitDefaultValue = attrEmitDefaultValue ?? emitDefaultValue; var shouldSerialize = GetShouldSerialize(compilation, attrMembers, types, serializingType, mtdLoc, attrs, ref diags); // after this point, we need to know what we're working with if (getter == null) { return(null, diags); } var formatter = GetFormatter(compilation, attrMembers, types, getter.ForType, mtdLoc, attrs, ref diags); return(MakeMember(mtdLoc, types, attrName, getter, formatter, shouldSerialize, emitDefaultValue, order, diags)); }