internal static InstanceProvider?ForDefault(AttributedMembers attrMembers, INamedTypeSymbol type, ref ImmutableArray <Diagnostic> diags) { var(isRecord, recordCons, _) = type.IsRecord(); if (isRecord) { recordCons = Utils.NonNull(recordCons); return(new InstanceProvider(true, recordCons, type)); } var defaultCons = type.InstanceConstructors.SingleOrDefault(p => p.Parameters.Length == 0); if (defaultCons != null) { var accessible = defaultCons.IsAccessible(attrMembers); if (!accessible) { var diag = Diagnostics.MethodNotPublicOrInternal(defaultCons.Locations.FirstOrDefault(), defaultCons); diags = diags.Add(diag); return(null); } return(new InstanceProvider(type)); } else { var diag = Diagnostics.NoInstanceProvider(type.Locations.FirstOrDefault(), type); diags = diags.Add(diag); return(null); } }