public static IDataContext Create(Lifetime lifetime, ITextControl textControl, ISolution solution)
        {
            var provider = new List <IDataRule>();

            provider.AddRule("Test", PsiDataConstants.DECLARED_ELEMENTS, ctx => TextControlToPsi.GetDeclaredElements(solution, textControl).ToDeclaredElementsDataConstant());
            provider.AddRule("Test", JetBrains.TextControl.DataContext.TextControlDataConstants.TEXT_CONTROL, textControl);
            provider.AddRule("Test", JetBrains.ProjectModel.DataContext.ProjectModelDataConstants.SOLUTION, solution);
            provider.AddRule("Test", PsiDataConstants.REFERENCE, ctx => TextControlToPsi.GetReferencesAtCaret(solution, textControl).FirstOrDefault());
            provider.AddRule("Test", PsiDataConstants.SELECTED_EXPRESSION, ctx => ExpressionSelectionUtil.GetSelectedExpression <ITreeNode>(solution, textControl, false));
            return(Shell.Instance.GetComponent <IActionManager>().DataContexts.CreateWithDataRules(lifetime, provider));
        }
        protected override void DoTest(IProject testProject)
        {
            CaretPosition caretPos = GetCaretPosition();

            using (ITextControl textControl = OpenTextControl(testProject, caretPos))
            {
                IDeclaredElement declaredElement = TextControlToPsi.GetDeclaredElements(Solution, textControl).FirstOrDefault();
                Assert.IsNotNull(declaredElement);

                Solution.GetComponent <CallRenameUtil>().CallRename(declaredElement, textControl, "xxx");

                CheckTextControl(textControl);
            }
        }
Ejemplo n.º 3
0
        public bool IsAvailable(IUserDataHolder cache)
        {
            if (!myProvider.Solution.GetComponent <MarksService>().Enabled.Value)
            {
                return(false);
            }
            bool x;
            var  declaredElements = TextControlToPsi.GetDeclaredElements(myProvider.Solution, myProvider.Document, myProvider.CaretOffset, out x);

            foreach (var declaredElement in declaredElements)
            {
                if (declaredElement.ShortName == ZoneConstants.ZoneAttributeName)
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
        protected override Action <JetBrains.TextControl.ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            if (!this.Highlighting.IsValid())
            {
                return(null);
            }

            var node             = this.Highlighting.Node;
            var badWordTextRange = this.Highlighting.CalculateRange().TextRange;

            var newText = StringUtil.ReplaceSection(node.GetText(), this.Suggestion, badWordTextRange.StartOffset - node.GetDocumentRange().TextRange.StartOffset, badWordTextRange.Length);

            if (node is IIdentifier)
            {
                return(textControl =>
                {
                    var declaredIdentifier = TextControlToPsi.GetDeclaredElements(solution, textControl).FirstOrDefault();
                    solution.GetComponent <RenameRefactoringExecutor>().Execute(declaredIdentifier, textControl, newText);
                });
            }

            if (node is IComment)
            {
                var elementFactory = CSharpElementFactory.GetInstance(node.GetPsiModule());
                var newComment     = elementFactory.CreateComment(newText);
                ModificationUtil.ReplaceChild(node, newComment);
                return(null);
            }

            if (node is IExpression)
            {
                var expression = node as IExpression;
                if (expression.ConstantValue.IsString())
                {
                    var elementFactory   = CSharpElementFactory.GetInstance(node.GetPsiModule());
                    var newStringLiteral = elementFactory.CreateExpression("$0", newText);
                    ModificationUtil.ReplaceChild(node, newStringLiteral);
                    return(null);
                }
            }

            return(null);
        }
        protected override void DoTest(Lifetime lifetime, IProject testProject)
        {
            var textControl = OpenTextControl(TestLifetime);
            var document    = textControl.Document;
            var projectFile = Solution.GetComponent <DocumentManager>().TryGetProjectFile(document);

            Assert.IsNotNull(projectFile, "projectFile == null");

            var       context         = CreateDataContext(textControl);
            var       declaredElement = TextControlToPsi.GetDeclaredElements(Solution, textControl).SingleOrDefault();
            Exception exception       = null;

            if (declaredElement != null)
            {
                try
                {
                    TestAdditionalInfo(declaredElement, projectFile);
                }
                catch (Exception e)
                {
                    exception = e;
                }
            }

            var quickDocService = Solution.GetComponent <IQuickDocService>();

            Assert.IsTrue(quickDocService.CanShowQuickDoc(context), "No QuickDoc available");
            quickDocService.ResolveGoto(context, (presenter, language) => ExecuteWithGold(projectFile, writer =>
            {
                var text = presenter.GetHtml(language).Text?.Text;
                Assert.NotNull(text);
                var startIdx = text.IndexOf("  <head>", StringComparison.Ordinal);
                var endIdx   = text.IndexOf("</head>", StringComparison.Ordinal) + "</head>".Length;
                Assert.AreEqual(string.CompareOrdinal(text, endIdx, "\n<body>", 0, "\n<body>".Length), 0);
                writer.Write(text.Remove(startIdx, endIdx - startIdx + 1));
            }));
            if (exception != null)
            {
                throw exception;
            }
        }
        protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            if (!Highlighting.IsValid())
            {
                return(null);
            }

            var node             = Highlighting.Node;
            var badWordTextRange = Highlighting.Range.TextRange;

            var newText = StringUtil.ReplaceSection(
                node.GetText(),
                Suggestion,
                badWordTextRange.StartOffset - node.GetDocumentRange().TextRange.StartOffset,
                badWordTextRange.Length
                );

            if (node is IIdentifier)
            {
                return(textControl => {
                    var declaredIdentifier = TextControlToPsi.GetDeclaredElements(solution, textControl)
                                             .FirstOrDefault();
                    solution.GetComponent <RenameRefactoringExecutor>().Execute(declaredIdentifier, textControl, newText);
                });
            }
            if (node is IComment)
            {
                var newElement = CreateNode(node, newText);
                ModificationUtil.ReplaceChild(node, newElement);
                return(null);
            }
            if (JavaScriptUtil.IsStringLiteral(node))
            {
                var newElement = CreateNode(node, newText);
                ModificationUtil.ReplaceChild(node, newElement);
                return(null);
            }
            return(null);
        }