提交 6cef5480 编写于 作者: D Dustin Campbell

Clean up member inserting completion providers (i.e. overrides and partial completion)

上级 e0a44481
......@@ -2,10 +2,8 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Completion.Providers;
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
......@@ -19,7 +17,7 @@
namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion
{
internal abstract class AbstractMemberInsertingCompletionProvider : AbstractCompletionProvider, ICustomCommitCompletionProvider
internal abstract class AbstractMemberInsertingCompletionProvider : CompletionListProvider, ICustomCommitCompletionProvider
{
private IWaitIndicator _waitIndicator;
private readonly SyntaxAnnotation _annotation = new SyntaxAnnotation();
......@@ -37,11 +35,6 @@ internal abstract class AbstractMemberInsertingCompletionProvider : AbstractComp
_waitIndicator = waitIndicator;
}
protected override Task<bool> IsExclusiveAsync(Document documentOpt, int caretPosition, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
{
return SpecializedTasks.True;
}
public void Commit(CompletionItem completionItem, ITextView textView, ITextBuffer subjectBuffer, ITextSnapshot triggerSnapshot, char? commitChar)
{
var currentSnapshot = subjectBuffer.CurrentSnapshot;
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion.CompletionProviders;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
......@@ -29,10 +29,16 @@ internal abstract partial class AbstractOverrideCompletionProvider : AbstractMem
public abstract bool TryDetermineModifiers(SyntaxToken startToken, SourceText text, int startLine, out Accessibility seenAccessibility, out DeclarationModifiers modifiers);
protected abstract TextSpan GetTextChangeSpan(SourceText text, int position);
protected override Task<IEnumerable<CompletionItem>> GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
public override async Task ProduceCompletionListAsync(CompletionListContext context)
{
var state = new ItemGetter(this, document, position, cancellationToken);
return state.GetItemsAsync();
var state = new ItemGetter(this, context.Document, context.Position, context.CancellationToken);
var items = await state.GetItemsAsync().ConfigureAwait(false);
if (items?.Any() == true)
{
context.MakeExclusive(true);
context.AddItems(items);
}
}
protected override ISymbol GenerateMember(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, MemberInsertionCompletionItem completionItem, CancellationToken cancellationToken)
......
......@@ -39,18 +39,28 @@ public AbstractPartialCompletionProvider(IWaitIndicator waitIndicator)
protected abstract Task<TextSpan> GetTextChangeSpanAsync(Document document, int position, CancellationToken cancellationToken);
protected abstract bool IsPartial(IMethodSymbol m);
protected override async Task<IEnumerable<CompletionItem>> GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
public override async Task ProduceCompletionListAsync(CompletionListContext context)
{
var document = context.Document;
var position = context.Position;
var cancellationToken = context.CancellationToken;
var tree = await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false);
DeclarationModifiers modifiers;
SyntaxToken token;
if (!IsPartialCompletionContext(tree, position, cancellationToken, out modifiers, out token))
{
return null;
return;
}
return await CreatePartialItemsAsync(document, position, modifiers, token, cancellationToken).ConfigureAwait(false);
var items = await CreatePartialItemsAsync(document, position, modifiers, token, cancellationToken).ConfigureAwait(false);
if (items?.Any() == true)
{
context.MakeExclusive(true);
context.AddItems(items);
}
}
protected override ISymbol GenerateMember(ISymbol member, INamedTypeSymbol containingType, Document document, MemberInsertionCompletionItem item, CancellationToken cancellationToken)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册