示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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);
                }
            }
        }