示例#1
0
        internal bool CalculateUseSiteDiagnostic(ref UseSiteInfo <AssemblySymbol> result)
        {
            Debug.Assert(IsDefinition);

            // Check type, custom modifiers
            if (DeriveUseSiteInfoFromType(ref result, this.TypeWithAnnotations, AllowedRequiredModifierType.System_Runtime_CompilerServices_Volatile))
            {
                return(true);
            }

            // If the member is in an assembly with unified references,
            // we check if its definition depends on a type from a unified reference.
            if (this.ContainingModule.HasUnifiedReferences)
            {
                HashSet <TypeSymbol> unificationCheckedTypes = null;
                DiagnosticInfo       diagnosticInfo          = result.DiagnosticInfo;
                if (this.TypeWithAnnotations.GetUnificationUseSiteDiagnosticRecursive(ref diagnosticInfo, this, ref unificationCheckedTypes))
                {
                    result = result.AdjustDiagnosticInfo(diagnosticInfo);
                    return(true);
                }

                result = result.AdjustDiagnosticInfo(diagnosticInfo);
            }

            return(false);
        }
        internal sealed override UseSiteInfo <AssemblySymbol> GetUseSiteInfo()
        {
            var type = this.TypeWithAnnotations;
            UseSiteInfo <AssemblySymbol> result = default;

            if (!DeriveUseSiteInfoFromType(ref result, type, AllowedRequiredModifierType.None) && this.ContainingModule.HasUnifiedReferences)
            {
                // If the member is in an assembly with unified references,
                // we check if its definition depends on a type from a unified reference.
                HashSet <TypeSymbol> unificationCheckedTypes = null;
                var diagnosticInfo = result.DiagnosticInfo;
                type.GetUnificationUseSiteDiagnosticRecursive(ref diagnosticInfo, this, ref unificationCheckedTypes);
                result = result.AdjustDiagnosticInfo(diagnosticInfo);
            }

            return(result);
        }
示例#3
0
        private BoundExpression MakeTupleFieldAccessAndReportUseSiteDiagnostics(BoundExpression tuple, SyntaxNode syntax, FieldSymbol field)
        {
            // Use default field rather than implicitly named fields since
            // fields from inferred names are not usable in C# 7.0.
            field = field.CorrespondingTupleField ?? field;

            UseSiteInfo <AssemblySymbol> useSiteInfo = field.GetUseSiteInfo();

            if (useSiteInfo.DiagnosticInfo?.Severity != DiagnosticSeverity.Error)
            {
                useSiteInfo = useSiteInfo.AdjustDiagnosticInfo(null);
            }

            _diagnostics.Add(useSiteInfo, syntax.Location);

            return(MakeTupleFieldAccess(syntax, field, tuple));
        }