Exemplo n.º 1
0
 public ChangeSignatureCodeAction(
     AbstractChangeSignatureService changeSignatureService,
     ChangeSignatureAnalysisSucceededContext context
     )
 {
     _changeSignatureService = changeSignatureService;
     _context = context;
 }
        private bool ExecuteCommand(ITextView textView, ITextBuffer subjectBuffer, CommandExecutionContext context)
        {
            using (context.OperationContext.AddScope(allowCancellation: true, FeaturesResources.Change_signature))
            {
                if (!IsAvailable(subjectBuffer, out var workspace))
                {
                    return(false);
                }

                var caretPoint = textView.GetCaretPoint(subjectBuffer);
                if (!caretPoint.HasValue)
                {
                    return(false);
                }

                var document = subjectBuffer.CurrentSnapshot.GetFullyLoadedOpenDocumentInCurrentContextWithChanges(
                    context.OperationContext, _threadingContext);
                if (document == null)
                {
                    return(false);
                }

                var changeSignatureService = document.GetRequiredLanguageService <AbstractChangeSignatureService>();

                var cancellationToken = context.OperationContext.UserCancellationToken;

                // TODO: Make asynchronous and avoid expensive semantic operations on UI thread:
                // https://github.com/dotnet/roslyn/issues/62135

                // Async operation to determine the change signature
                var changeSignatureContext = changeSignatureService.GetChangeSignatureContextAsync(
                    document,
                    caretPoint.Value.Position,
                    restrictToDeclarations: false,
                    _globalOptions.CreateProvider(),
                    cancellationToken).WaitAndGetResult(context.OperationContext.UserCancellationToken);

                // UI thread bound operation to show the change signature dialog.
                var changeSignatureOptions = AbstractChangeSignatureService.GetChangeSignatureOptions(changeSignatureContext);

                // Async operation to compute the new solution created from the specified options.
                var result = changeSignatureService.ChangeSignatureWithContextAsync(changeSignatureContext, changeSignatureOptions, cancellationToken).WaitAndGetResult(cancellationToken);

                // UI thread bound operation to show preview changes dialog / show error message, then apply the solution changes (if applicable).
                HandleResult(result, document.Project.Solution, workspace, context);

                return(true);
            }
        }
Exemplo n.º 3
0
 public ChangeSignatureCodeAction(AbstractChangeSignatureService changeSignatureService, ChangeSignatureAnalyzedContext context)
 {
     _changeSignatureService = changeSignatureService;
     _context = context;
 }
Exemplo n.º 4
0
 public ChangeSignatureCodeAction(AbstractChangeSignatureService changeSignatureService, ChangeSignatureAnalyzedContext context)
 {
     this.changeSignatureService = changeSignatureService;
     this.context = context;
 }
Exemplo n.º 5
0
 public override object?GetOptions(CancellationToken cancellationToken)
 => AbstractChangeSignatureService.GetChangeSignatureOptions(_context);
Exemplo n.º 6
0
 public override object GetOptions(CancellationToken cancellationToken)
 => AbstractChangeSignatureService.GetChangeSignatureOptions(_context)
 ?? new ChangeSignatureOptionsResult(null !, false);