protected override Action <JetBrains.TextControl.ITextControl> ExecutePsiTransaction(JetBrains.ProjectModel.ISolution solution, JetBrains.Application.Progress.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 TreeElement) { var elementFactory = HtmlElementFactory.GetInstance(node.Language); var newElements = elementFactory.CompileText(newText, node).ToList(); if (newElements.Count > 0) { var recentNode = ModificationUtil.ReplaceChild(node, newElements[0]); for (int i = 1; i < newElements.Count; i++) { recentNode = ModificationUtil.AddChildAfter(recentNode.Parent, recentNode, newElements[i]); } } return(null); } return(null); }
public override void Accept(JetBrains.TextControl.ITextControl textControl, JetBrains.Util.TextRange nameRange, LookupItemInsertType lookupItemInsertType, Suffix suffix, JetBrains.ProjectModel.ISolution solution, bool keepCaretStill) { Solution.GetPsiServices().Files.CommitAllDocuments(); IDisposable changeUnit = Shell.Instance.GetComponent <TextControlChangeUnitFactory>().CreateChangeUnit(textControl, "Expand live template"); try { var method = (IMethod)_instance.Element; var invocationExpression = ((IInvocationExpression)Context.NodeInFile.Parent); //target.GetMethod() string target = ((IReferenceExpression)invocationExpression.InvokedExpression).QualifierExpression.GetText(); if (!method.IsStatic) { target = string.Format("Expression.Default({0})", target); } textControl.Document.DeleteText(invocationExpression.GetDocumentRange().TextRange); string[] parameters; string[] arguments; BuildArguments(method, out parameters, out arguments); var template = new Template("GetMethodTemplate", string.Empty, string.Format("Expression.Call({0}, \"{1}\", new Type[] {{ {2} }}, {3}).Method", target, method.ShortName, string.Join(", ", parameters.Select(p => string.Format("typeof({0})", p))), string.Join(", ", arguments)), false, true, false, TemplateApplicability.Live); for (int i = 0; i < parameters.Length; i++) { template.Fields.Add(new TemplateField(parameters[i].Replace("$", string.Empty), parameters[i], 0)); } HotspotSession sessionFromTemplate = LiveTemplatesManager.Instance.CreateHotspotSessionFromTemplate( template, solution, textControl, (Action <IHotspotSession>)null); if (sessionFromTemplate == null) { return; } sessionFromTemplate.Execute(changeUnit); } catch { changeUnit.Dispose(); throw; } }