internal static (DeserializableMember?Member, ImmutableArray <Diagnostic> Diagnostics) ForMethod( Compilation compilation, AttributedMembers attrMembers, DeserializerTypes types, INamedTypeSymbol deserializingType, 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.DeserializableMemberMustHaveNameSetForMethod(mtdLoc, mtd); diags = diags.Add(diag); attrName = "--UNKNOWN--"; } var setter = GetSetterForMethod(compilation, types, deserializingType, mtd, mtdLoc, ref diags); int?order = Utils.GetOrderFromAttributes(attrMembers, mtdLoc, types.Framework, types.OurTypes.DeserializerMemberAttribute, attrs, ref diags); var isRequired = false; var attrIsRequiredValue = GetMemberRequiredFromAttributes(attrMembers, mtdLoc, attrs, ref diags); isRequired = attrIsRequiredValue ?? isRequired; var reset = GetReset(compilation, attrMembers, types, deserializingType, mtdLoc, attrs, ref diags); // after this point, we need to know what we're working with if (setter == null) { return(null, diags); } var parser = GetParser(compilation, attrMembers, types, setter.ValueType, mtdLoc, attrs, ref diags); return(MakeMember(mtdLoc, types, attrName, setter, parser, reset, isRequired, order, diags)); }