提交 cca9ed90 编写于 作者: G Gen Lu

Address review comments

上级 43e7e360
......@@ -201,19 +201,23 @@ internal CompletionSource(ITextView textView, IThreadingContext threadingContext
return new AsyncCompletionData.CompletionContext(ImmutableArray<VSCompletionItem>.Empty);
}
ImmutableArray<VSCompletionItem> items;
var filterCache = PooledDictionary<string, AsyncCompletionData.CompletionFilter>.GetInstance();
var itemsBuilder = new ArrayBuilder<VSCompletionItem>(completionList.Items.Length);
foreach (var roslynItem in completionList.Items)
try
{
cancellationToken.ThrowIfCancellationRequested();
var item = Convert(document, roslynItem, completionService, filterCache);
itemsBuilder.Add(item);
foreach (var roslynItem in completionList.Items)
{
cancellationToken.ThrowIfCancellationRequested();
var item = Convert(document, roslynItem, completionService, filterCache);
itemsBuilder.Add(item);
}
}
finally
{
filterCache.Free();
items = itemsBuilder.ToImmutableAndFree();
}
filterCache.Free();
var items = itemsBuilder.ToImmutableAndFree();
var suggestionItemOptions = completionList.SuggestionModeItem != null
? new AsyncCompletionData.SuggestionItemOptions(
......
......@@ -68,7 +68,7 @@ private async Task AddCompletionItemsAsync(CompletionContext completionContext,
// Get completion items from current project.
var compilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);
await typeImportCompletionService.GetTopLevelTypesFromProjectAsync(project, HandlePublicAndInternalItem, cancellationToken)
await typeImportCompletionService.GetTopLevelTypesAsync(project, HandlePublicAndInternalItem, cancellationToken)
.ConfigureAwait(false);
// Get completion items from source references.
......@@ -79,18 +79,14 @@ await typeImportCompletionService.GetTopLevelTypesFromProjectAsync(project, Hand
var referencedProject = project.Solution.GetProject(projectReference.ProjectId);
var referencedCompilation = await referencedProject.GetCompilationAsync(cancellationToken).ConfigureAwait(false);
await typeImportCompletionService.GetTopLevelTypesFromProjectAsync(
await typeImportCompletionService.GetTopLevelTypesAsync(
referencedProject,
GetHandler(compilation.Assembly, referencedCompilation.Assembly),
cancellationToken).ConfigureAwait(false);
}
// Get completion items from PE references.
var peReferences = project.MetadataReferences
.Where(reference => reference is PortableExecutableReference)
.Cast<PortableExecutableReference>();
foreach (var peReference in peReferences)
foreach (var peReference in project.MetadataReferences.OfType<PortableExecutableReference>())
{
cancellationToken.ThrowIfCancellationRequested();
......
......@@ -21,16 +21,16 @@ internal interface ITypeImportCompletionService : IWorkspaceService
/// getting types from source only, so the project must support compilation.
/// For getting types from PE, use <see cref="GetTopLevelTypesFromPEReference"/>.
/// </summary>
Task GetTopLevelTypesFromProjectAsync(
Task GetTopLevelTypesAsync(
Project project,
Action<TypeImportCompletionItemInfo> handleAccessibleItem,
Action<TypeImportCompletionItemInfo> handleItem,
CancellationToken cancellationToken);
void GetTopLevelTypesFromPEReference(
Solution solution,
Compilation compilation,
PortableExecutableReference peReference,
Action<TypeImportCompletionItemInfo> handleAccessibleItem,
Action<TypeImportCompletionItemInfo> handleItem,
CancellationToken cancellationToken);
}
......@@ -85,7 +85,7 @@ public Service(ConcurrentDictionary<string, ReferenceCacheEntry> peReferenceCach
_projectItemsCache = projectReferenceCache;
}
public async Task GetTopLevelTypesFromProjectAsync(
public async Task GetTopLevelTypesAsync(
Project project,
Action<TypeImportCompletionItemInfo> handleItem,
CancellationToken cancellationToken)
......@@ -96,6 +96,8 @@ public Service(ConcurrentDictionary<string, ReferenceCacheEntry> peReferenceCach
}
var compilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);
// Since we only need top level types from source, therefore we only care if source symbol checksum changes.
var checksum = await SymbolTreeInfo.GetSourceSymbolsChecksumAsync(project, cancellationToken).ConfigureAwait(false);
GetAccessibleTopLevelTypesWorker(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册