private VSCompletionItem Convert( Document document, RoslynCompletionItem roslynItem, CompletionService completionService, Dictionary <string, AsyncCompletionData.CompletionFilter> filterCache) { var imageId = roslynItem.Tags.GetFirstGlyph().GetImageId(); var filters = GetFilters(roslynItem, filterCache); // roslynItem generated by providers can contain an insertionText in a property bag. // We will not use it but other providers may need it. // We actually will calculate the insertion text once again when called TryCommit. if (!roslynItem.Properties.TryGetValue(InsertionText, out var insertionText)) { insertionText = roslynItem.DisplayText; } var supportedPlatforms = SymbolCompletionItem.GetSupportedPlatforms(roslynItem, document.Project.Solution.Workspace); var attributeImages = supportedPlatforms != null ? s_WarningImageAttributeImagesArray : ImmutableArray <ImageElement> .Empty; var item = new VSCompletionItem( displayText: roslynItem.GetEntireDisplayText(), source: this, icon: new ImageElement(new ImageId(imageId.Guid, imageId.Id), roslynItem.DisplayText), filters: filters, suffix: roslynItem.InlineDescription, // InlineDescription will be right-aligned in the selection popup insertText: insertionText, sortText: roslynItem.SortText, filterText: roslynItem.FilterText, attributeIcons: attributeImages); item.Properties.AddProperty(RoslynItem, roslynItem); return(item); }
private VSCompletionItem Convert( Document document, RoslynCompletionItem roslynItem) { if (roslynItem.IsCached && s_roslynItemToVsItem.TryGetValue(roslynItem, out var vsItem)) { return(vsItem); } var imageId = roslynItem.Tags.GetFirstGlyph().GetImageId(); var filters = GetFilters(roslynItem); // roslynItem generated by providers can contain an insertionText in a property bag. // We will not use it but other providers may need it. // We actually will calculate the insertion text once again when called TryCommit. if (!roslynItem.Properties.TryGetValue(InsertionText, out var insertionText)) { insertionText = roslynItem.DisplayText; } var supportedPlatforms = SymbolCompletionItem.GetSupportedPlatforms(roslynItem, document.Project.Solution.Workspace); var attributeImages = supportedPlatforms != null ? s_WarningImageAttributeImagesArray : ImmutableArray <ImageElement> .Empty; var item = new VSCompletionItem( displayText: roslynItem.GetEntireDisplayText(), source: this, icon: new ImageElement(new ImageId(imageId.Guid, imageId.Id), roslynItem.DisplayText), filters: filters, suffix: roslynItem.InlineDescription, // InlineDescription will be right-aligned in the selection popup insertText: insertionText, sortText: roslynItem.SortText, filterText: roslynItem.FilterText, attributeIcons: attributeImages); item.Properties.AddProperty(RoslynItem, roslynItem); // It doesn't make sense to cache VS item for those Roslyn items created from scratch for each session, // since CWT uses object identity for comparison. if (roslynItem.IsCached) { s_roslynItemToVsItem.Add(roslynItem, item); } return(item); }