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();
            });
        }
示例#2
0
            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();
            }
示例#3
0
        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();
        }
示例#4
0
            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();
            }