internal static (DeserializableMember?Member, ImmutableArray <Diagnostic> Diagnostics) ForConstructorParameter( Compilation compilation, AttributedMembers attrMembers, DeserializerTypes types, INamedTypeSymbol deserializingType, IParameterSymbol parameter, ImmutableArray <AttributeSyntax> attrs ) { var diags = ImmutableArray <Diagnostic> .Empty; var parameterLoc = parameter.Locations.FirstOrDefault(); var attrName = Utils.GetNameFromAttributes(attrMembers, parameterLoc, attrs, ref diags); var name = attrName ?? parameter.Name; var setter = new Setter(parameter); int?order = Utils.GetOrderFromAttributes(attrMembers, parameterLoc, types.Framework, types.OurTypes.DeserializerMemberAttribute, attrs, ref diags); // note that this defaults to TRUE var isRequired = true; var attrIsRequiredValue = GetMemberRequiredFromAttributes(attrMembers, parameterLoc, attrs, ref diags); isRequired = attrIsRequiredValue ?? isRequired; if (!isRequired) { var diag = Diagnostics.ParametersMustBeRequired(parameterLoc, deserializingType, parameter); diags = diags.Add(diag); return(null, diags); } var reset = GetReset(compilation, attrMembers, types, deserializingType, parameterLoc, attrs, ref diags); if (reset != null && !reset.IsStatic) { var diag = Diagnostics.BadReset_MustBeStaticForParameters(parameterLoc, deserializingType, parameter, reset.Method); diags = diags.Add(diag); return(null, diags); } var parser = GetParser(compilation, attrMembers, types, setter.ValueType, parameterLoc, attrs, ref diags); return(MakeMember(parameterLoc, types, name, setter, parser, reset, isRequired, order, diags)); }