Example #1
0
            private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
            {
                // maybeWritten == 'ref' argument.
                var isRef = valueUsageInfo == ValueUsageInfo.ReadableWritableReference;

                _currentAnalysisData.OnWriteReferenceFound(symbol, operation, maybeWritten: isRef, isRef);
                ProcessPossibleDelegateCreationAssignment(symbol, operation);
            }
Example #2
0
        private static ReferenceInfoMap CreateReferenceInfo(ValueUsageInfo valueUsageInfo)
        {
            var referenceInfoMap = ReferenceInfoMap.Empty;

            if (valueUsageInfo != ValueUsageInfo.None)
            {
                referenceInfoMap = referenceInfoMap.Add(nameof(ValueUsageInfo), valueUsageInfo.ToLocalizableValues());
            }

            return(referenceInfoMap);
        }
Example #3
0
            private bool TryRemove(ISymbol memberSymbol, out ValueUsageInfo valueUsageInfo)
            {
                lock (_gate)
                {
                    if (_symbolValueUsageStateMap.TryGetValue(memberSymbol, out valueUsageInfo))
                    {
                        _symbolValueUsageStateMap.Remove(memberSymbol);
                        return(true);
                    }

                    return(false);
                }
            }
Example #4
0
            private void OnSymbolUsage(ISymbol memberSymbol, ValueUsageInfo usageInfo)
            {
                Debug.Assert(IsCandidateSymbol(memberSymbol));

                lock (_gate)
                {
                    // Update the usage info for the memberSymbol
                    if (_symbolValueUsageStateMap.TryGetValue(memberSymbol, out var currentUsageInfo))
                    {
                        usageInfo = currentUsageInfo | usageInfo;
                    }

                    _symbolValueUsageStateMap[memberSymbol] = usageInfo;
                }
            }
Example #5
0
        public static ImmutableArray <string> ToLocalizableValues(this ValueUsageInfo valueUsageInfo)
        {
            if (valueUsageInfo == ValueUsageInfo.None)
            {
                return(ImmutableArray <string> .Empty);
            }

            var builder = ArrayBuilder <string> .GetInstance();

            foreach (ValueUsageInfo value in Enum.GetValues(typeof(ValueUsageInfo)))
            {
                if (value.IsSingleBitSet() && (valueUsageInfo & value) != 0)
                {
                    builder.Add(value.ToLocalizableString());
                }
            }

            return(builder.ToImmutableAndFree());
        }
Example #6
0
        public static string ToLocalizableString(this ValueUsageInfo value)
        {
            // We don't support localizing value combinations.
            Debug.Assert(value.IsSingleBitSet());

            switch (value)
            {
            case ValueUsageInfo.Read:
                return(WorkspacesResources.ValueUsageInfo_Read);

            case ValueUsageInfo.Write:
                return(WorkspacesResources.ValueUsageInfo_Write);

            case ValueUsageInfo.Reference:
                return(WorkspacesResources.ValueUsageInfo_Reference);

            case ValueUsageInfo.Name:
                return(WorkspacesResources.ValueUsageInfo_Name);

            default:
                Debug.Fail($"Unhandled value: '{value.ToString()}'");
                return(value.ToString());
            }
        }
Example #7
0
 public static bool IsWrittenTo(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & ValueUsageInfo.Write) != 0;
Example #8
0
 public static bool IsReadFrom(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & ValueUsageInfo.Read) != 0;
Example #9
0
 public static SymbolUsageInfo Create(ValueUsageInfo valueUsageInfo)
 => new(valueUsageInfo, typeOrNamespaceUsageInfoOpt : null);
Example #10
0
 public static SymbolUsageInfo Create(ValueUsageInfo valueUsageInfo) =>
Example #11
0
 private static ReferenceInfoMap GetOrCreateReferenceInfo(ValueUsageInfo valueUsageInfo)
 => s_valueUsageInfoToReferenceInfoMap.GetOrAdd(valueUsageInfo, v => CreateReferenceInfo(v));
Example #12
0
 internal SourceReferenceItem(DefinitionItem definition, DocumentSpan sourceSpan, ValueUsageInfo valueUsageInfo)
     : this(definition, sourceSpan, GetOrCreateReferenceInfo(valueUsageInfo))
 {
     IsWrittenTo = valueUsageInfo.IsWrittenTo();
 }
Example #13
0
 public static bool IsNameOnly(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & ValueUsageInfo.Name) != 0;
Example #14
0
 internal ReferenceLocation(Document document, IAliasSymbol alias, Location location, bool isImplicit, ValueUsageInfo valueUsageInfo, CandidateReason candidateReason)
     : this()
 {
     this.Document        = document;
     this.Alias           = alias;
     this.Location        = location;
     this.IsImplicit      = isImplicit;
     this.ValueUsageInfo  = valueUsageInfo;
     this.CandidateReason = candidateReason;
 }
Example #15
0
 public static bool ContainsNonReadWriteRef(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & ValueUsageInfo.NonReadWriteRef) != 0;
Example #16
0
 public static bool ContainsWriteOrWritableRef(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & (ValueUsageInfo.Write | ValueUsageInfo.WritableRef)) != 0;
Example #17
0
 public static bool ContainsReadOrReadableRef(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & (ValueUsageInfo.Read | ValueUsageInfo.ReadableRef)) != 0;
Example #18
0
 public static bool IsReference(this ValueUsageInfo valueUsageInfo)
 => (valueUsageInfo & ValueUsageInfo.Reference) != 0;
Example #19
0
 public static bool IsSingleBitSet(this ValueUsageInfo valueUsageInfo)
 => valueUsageInfo != ValueUsageInfo.None && (valueUsageInfo & (valueUsageInfo - 1)) == 0;