public override async ValueTask OnDefinitionFoundAsync(DefinitionItem definition) { using (await _semaphore.DisposableWaitAsync(CancellationToken).ConfigureAwait(false)) { if (_definitionToId.ContainsKey(definition)) { return; } // Assigning a new id to the definition _id++; _definitionToId.Add(definition, _id); // Creating a new VSReferenceItem for the definition var definitionItem = await GenerateVSReferenceItemAsync( _id, definitionId : _id, _document, _position, definition.SourceSpans.FirstOrDefault(), definition.DisplayableProperties, _metadataAsSourceFileService, definition.GetClassifiedText(), definition.Tags.GetFirstGlyph(), symbolUsageInfo : null, isWrittenTo : false, CancellationToken).ConfigureAwait(false); if (definitionItem != null) { // If a definition shouldn't be included in the results list if it doesn't have references, we // have to hold off on reporting it until later when we do find a reference. if (definition.DisplayIfNoReferences) { _workQueue.AddWork(definitionItem); } else { _definitionsWithoutReference.Add(definitionItem.Id, definitionItem); } } } }
public override async Task OnDefinitionFoundAsync(DefinitionItem definition) { using (await _semaphore.DisposableWaitAsync(CancellationToken).ConfigureAwait(false)) { if (_definitionToId.ContainsKey(definition)) { return; } // Assigning a new id to the definition _id++; _definitionToId.Add(definition, _id); // VSReferenceItem currently doesn't support the ClassifiedTextElement type for DefinitionText, // so for now we just pass in a string. // https://devdiv.visualstudio.com/DevDiv/_workitems/edit/918138 var classifiedText = definition.GetClassifiedText(); using var pd = PooledStringBuilder.GetInstance(out var pooledBuilder); foreach (var text in classifiedText.Runs) { pooledBuilder.Append(text.Text); } var definitionText = pooledBuilder.ToString(); // Creating a new VSReferenceItem for the definition var definitionItem = await GenerateVSReferenceItemAsync( _id, definitionId : _id, _document, _position, definition.SourceSpans.FirstOrDefault(), definition.DisplayableProperties, _metadataAsSourceFileService, definitionText, symbolUsageInfo : null, CancellationToken).ConfigureAwait(false); if (definitionItem != null) { AddToReferencesToReport_MustBeCalledUnderLock(definitionItem); } } }