Esempio n. 1
0
        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);
            }
        }