protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress) { IInvocationExpression newExpression; using (WriteLockCookie.Create()) { var factory = CSharpElementFactory.GetInstance(myWarningCreationExpression); newExpression = (IInvocationExpression)factory.CreateExpression("gameObject.AddComponent<$0>()", myWarningCreationExpression.ExplicitType()); newExpression = ModificationUtil.ReplaceChild(myWarningCreationExpression, newExpression); } return(textControl => { var qualifier = newExpression.ExtensionQualifier; Assertion.AssertNotNull(qualifier, "qualifier != null"); var hotspotExpression = new MacroCallExpressionNew(new SuggestVariableOfTypeMacroDef()); hotspotExpression.AddParameter(new ConstantMacroParameter("UnityEngine.GameObject")); var field = new TemplateField("gameObject", hotspotExpression, 0); HotspotInfo[] fieldInfos = { new HotspotInfo(field, qualifier.GetDocumentRange()) }; var manager = LiveTemplatesManager.Instance; var invalidRange = DocumentRange.InvalidRange; var session = manager.CreateHotspotSessionAtopExistingText(solution, invalidRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, fieldInfos); session.Execute(); }); }
protected override void AfterComplete(ITextControl textControl, IUsingStatement statement) { var variableNames = SuggestResourceVariableNames(statement); var newStatement = PutStatementCaret(textControl, statement); if (newStatement == null) { return; } var resourceDeclaration = newStatement.Declaration; if (resourceDeclaration == null) { return; } var declaration = (ILocalVariableDeclaration)resourceDeclaration.Declarators[0]; var typeExpression = new MacroCallExpressionNew(new SuggestVariableTypeMacroDef()); var nameExpression = new NameSuggestionsExpression(variableNames); var typeSpot = new HotspotInfo( new TemplateField("type", typeExpression, 0), declaration.TypeUsage.GetDocumentRange()); var nameSpot = new HotspotInfo( new TemplateField("name", nameExpression, 0), declaration.NameIdentifier.GetDocumentRange()); var endSelectionRange = new TextRange(textControl.Caret.Offset()); var liveTemplatesManager = Info.ExecutionContext.LiveTemplatesManager; var session = liveTemplatesManager.CreateHotspotSessionAtopExistingText( newStatement.GetSolution(), endSelectionRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, typeSpot, nameSpot); session.Execute(); }
private static void ApplyRenameHotspots( [NotNull] LiveTemplatesManager liveTemplatesManager, [NotNull] ITextControl textControl, [NotNull] IForeachStatement statement, [NotNull] IList <string> namesCollection, [CanBeNull] IReferenceExpression extraReference = null) { var variableDeclaration = statement.IteratorDeclaration; var endSelectionRange = new TextRange(textControl.Caret.Offset()); var suggestTypeName = new MacroCallExpressionNew(new SuggestVariableTypeMacroDef()); var typeNameInfo = new HotspotInfo( new TemplateField("type", suggestTypeName, 0), variableDeclaration.VarKeyword.GetDocumentRange()); var nameRanges = new LocalList <DocumentRange>(); nameRanges.Add(variableDeclaration.NameIdentifier.GetDocumentRange()); if (extraReference != null) { var documentRange = extraReference.GetDocumentRange(); nameRanges.Add(documentRange); endSelectionRange = new TextRange(documentRange.TextRange.EndOffset); } var variableNameInfo = new HotspotInfo( new TemplateField("name", new NameSuggestionsExpression(namesCollection), 0), nameRanges.ToArray()); var session = liveTemplatesManager.CreateHotspotSessionAtopExistingText( statement.GetSolution(), endSelectionRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, typeNameInfo, variableNameInfo); session.Execute(); }
protected override void AfterComplete(ITextControl textControl, IParenthesizedExpression expression) { var castExpression = (ICastExpression)expression.Expression; var expectedTypeMacro = new MacroCallExpressionNew(new GuessExpectedTypeMacroDef()); var hotspotInfo = new HotspotInfo( new TemplateField("T", expectedTypeMacro, 0), castExpression.TargetType.GetDocumentRange()); var endRange = expression.GetDocumentRange().EndOffsetRange().TextRange; var session = Info.ExecutionContext.LiveTemplatesManager.CreateHotspotSessionAtopExistingText( expression.GetSolution(), endRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, hotspotInfo); session.Execute(); }