public override IEnumerable <MonoDevelop.CodeActions.CodeAction> GetActions(Document document, object _context, TextLocation loc, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                yield break;
            }
            var context = _context as MDRefactoringContext;

            if (context == null || context.IsInvalid || context.RootNode == null)
            {
                yield break;
            }
            var actions = provider.GetActions(context);

            if (actions == null)
            {
                LoggingService.LogWarning(provider + " returned null actions.");
                yield break;
            }
            int num = 0;

            foreach (var action_ in actions)
            {
                var action = action_;
                if (actionId.Count <= num)
                {
                    actionId.Add(provider.GetType().FullName + "'" + num);
                }
                yield return(new NRefactoryCodeAction(actionId[num], GettextCatalog.GetString(action.Description ?? ""), action));

                num++;
            }
        }
        protected void TestWrongContext(CodeActionProvider action, string input)
        {
            var context = TestRefactoringContext.Create(input);

            context.FormattingOptions = formattingOptions;
            bool isValid = action.GetActions(context).Any();

            if (isValid)
            {
                Console.WriteLine("valid node is:" + context.GetNode());
            }
            Assert.IsTrue(!isValid, action.GetType() + " shouldn't be valid there.");
        }
        protected string RunContextAction(CodeActionProvider action, string input,
                                          int actionIndex = 0, bool expectErrors = false)
        {
            var context = TestRefactoringContext.Create(input, expectErrors);

            context.FormattingOptions = formattingOptions;
            bool isValid = action.GetActions(context).Any();

            if (!isValid)
            {
                Console.WriteLine("invalid node is:" + context.GetNode());
            }
            Assert.IsTrue(isValid, action.GetType() + " is invalid.");
            using (var script = context.StartScript()) {
                action.GetActions(context).Skip(actionIndex).First().Run(script);
            }

            return(context.doc.Text);
        }