protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            var factory = JavaScriptElementFactory.GetInstance(_indexExpression);

            using (WriteLockCookie.Create())
                ModificationUtil.ReplaceChild(_indexExpression, factory.CreateExpression(_replacement));
            return(null);
        }
예제 #2
0
        public override IReference BindTo(IDeclaredElement element)
        {
            var factory           = JavaScriptElementFactory.GetInstance(myOwner);
            var literalExpression = (IJavaScriptLiteralExpression)factory.CreateExpression("\"$0\"", element.ShortName);
            var newExpression     = myOwner.ReplaceBy(literalExpression);

            return(newExpression.FindReference <AsmDefNameReference>() ?? this);
        }
예제 #3
0
        private static IJavaScriptTreeNode DoTransaction(ISolution solution, JavaScriptElementFactory elementFactory,
		                                                 Func<JavaScriptElementFactory, IJavaScriptTreeNode> addMethod)
        {
            IJavaScriptTreeNode newExpression;
            using (solution.GetComponent<IShellLocks>().UsingWriteLock())
            {
                newExpression = addMethod(elementFactory);
            }
            return newExpression;
        }
        public override void Rename(IRenameRefactoring executer, IProgressIndicator pi, bool hasConflictsWithDeclarations,
                                    IRefactoringDriver driver)
        {
            // Rename the "declaration"
            var declaredElement  = myPointer.FindDeclaredElement();
            var originalTreeNode = declaredElement?.GetTreeNode();

            if (originalTreeNode == null)
            {
                return;
            }

            var originalRange     = originalTreeNode.GetDocumentRange();
            var factory           = JavaScriptElementFactory.GetInstance(originalTreeNode);
            var literalExpression = factory.CreateExpression("\"$0\"", NewName);
            var newExpression     = originalTreeNode.ReplaceBy(literalExpression);

            RemoveFromTextualOccurrences(executer, originalRange);

            var references = executer.Workflow.GetElementReferences(declaredElement);

            if (!Enumerable.Any(references))
            {
                return;
            }

            pi.Start(references.Count);

            // Create a new declared element (other implementations don't appear to cache this, either)
            var element = new AsmDefNameDeclaredElement(declaredElement.GetJsServices(), NewName,
                                                        declaredElement.SourceFile, newExpression.GetTreeStartOffset().Offset);

            // Rename/bind the references
            foreach (var pair in LanguageUtil.SortReferences(references.Where(r => r.IsValid())))
            {
                foreach (var sortedReference in LanguageUtil.GetSortedReferences(pair.Value))
                {
                    InterruptableActivityCookie.CheckAndThrow(pi);

                    var referenceRange = sortedReference.GetDocumentRange();

                    if (sortedReference.IsValid())
                    {
                        sortedReference.BindTo(element);
                    }

                    RemoveFromTextualOccurrences(executer, referenceRange);

                    pi.Advance();
                }
            }

            element.GetPsiServices().Caches.Update();
            myNewPointer = element.CreateElementPointer();
        }
        protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            var factory    = JavaScriptElementFactory.GetInstance(_invocationExpression);
            var arguments  = Enumerable.Range(1, _invocationExpression.Arguments.Count - 1).Select(n => "$" + n);
            var expression = string.Format("$0({0})", string.Join(", ", arguments));
            var args       = _invocationExpression.Arguments.Skip(1)
                             .Prepend(((IReferenceExpression)_invocationExpression.InvokedExpression).Qualifier)
                             .Cast <object>()
                             .ToArray();

            _invocationExpression.ReplaceBy(factory.CreateExpression(expression, args));
            return(null);
        }
예제 #6
0
 private IJavaScriptTreeNode AddUseStrict(JavaScriptElementFactory elementFactory)
 {
     var useStrict = elementFactory.CreateStatement("\"use strict\";");
     var statement = expression;
     while (!(statement is IJavaScriptStatement) && statement.Parent != null)
         statement = statement.Parent;
     var newExpression = ModificationUtil.AddChildBefore(statement, useStrict);
     return newExpression;
 }