protected override void AfterComplete(ITextControl textControl, IExpressionStatement statement)
            {
                if (myMemberPointer == null)
                {
                    return;
                }

                var memberDeclaration = myMemberPointer.GetTreeNode();

                if (memberDeclaration == null)
                {
                    return;
                }

                var assignment       = (IAssignmentExpression)statement.Expression;
                var memberIdentifier = ((IReferenceExpression)assignment.Dest).NameIdentifier;

                var hotspotInfo = new HotspotInfo(
                    new TemplateField("memberName", new NameSuggestionsExpression(myMemberNames), 0),
                    memberIdentifier.GetDocumentRange(), memberDeclaration.GetNameDocumentRange());

                var endRange = statement.GetDocumentRange().EndOffsetRange().TextRange;
                var session  = myTemplatesManager.CreateHotspotSessionAtopExistingText(
                    statement.GetSolution(), endRange, textControl,
                    LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, hotspotInfo);

                session.Execute();
            }
        private Action <ITextControl> MarkInsertedDescription(ISolution solution, ExceptionDocCommentModel insertedExceptionModel)
        {
            var exceptionCommentRange = insertedExceptionModel.GetMarkerRange();

            if (exceptionCommentRange == DocumentRange.InvalidRange)
            {
                return(null);
            }

            var copyExceptionDescription =
                string.IsNullOrEmpty(insertedExceptionModel.ExceptionDescription) ||
                insertedExceptionModel.ExceptionDescription.Contains("[MARKER]");

            var exceptionDescription = copyExceptionDescription ? "Condition" : insertedExceptionModel.ExceptionDescription;

            var nameSuggestionsExpression = new NameSuggestionsExpression(new[] { exceptionDescription });
            var field     = new TemplateField("name", nameSuggestionsExpression, 0);
            var fieldInfo = new HotspotInfo(field, exceptionCommentRange);

            return(textControl =>
            {
                var hotspotSession = Shell.Instance.GetComponent <LiveTemplatesManager>()
                                     .CreateHotspotSessionAtopExistingText(
                    solution, TextRange.InvalidRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret,
                    new[] { fieldInfo });

                hotspotSession.Execute();
            });
        }
Example #3
0
    private void OnHotspotClicked(
        HotspotWidget hotspotWidget,
        WidgetEvent widgetEvent)
    {
        if (m_currentNavRef.IsValid)
        {
            WidgetEvent.MouseClickEventParameters eventParameters =
                widgetEvent.EventParameters as WidgetEvent.MouseClickEventParameters;
            Point2d     clickPoint  = new Point2d(eventParameters.worldX, eventParameters.worldY);
            HotspotInfo hotspotInfo = hotspotWidget.Userdata as HotspotInfo;

            switch (hotspotInfo.hotspotType)
            {
            case eHotspotType.energy_tank:
            {
                EnergyTankData energyTankData = hotspotInfo.hotspotEntity as EnergyTankData;

                m_contextOverlayController.OnEnergyTankClicked(clickPoint, energyTankData);
            }
            break;

            case eHotspotType.portal:
            {
                RoomPortal portal = hotspotInfo.hotspotEntity as RoomPortal;

                m_contextOverlayController.OnPortalClicked(clickPoint, portal);
            }
            break;
            }
        }
    }
Example #4
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();
            }
            protected override void AfterComplete(ITextControl textControl, IForStatement statement)
            {
                var variableNames = SuggestIteratorVariableNames(statement);

                var newStatement = PutStatementCaret(textControl, statement);

                if (newStatement == null)
                {
                    return;
                }

                var condition = (IRelationalExpression)newStatement.Condition;
                var variable  = (ILocalVariableDeclaration)newStatement.Initializer.Declaration.Declarators[0];
                var iterator  = (IPostfixOperatorExpression)newStatement.Iterators.Expressions[0];

                var variableNameInfo = new HotspotInfo(
                    new TemplateField("name", new NameSuggestionsExpression(variableNames), 0),
                    variable.NameIdentifier.GetDocumentRange(),
                    condition.LeftOperand.GetDocumentRange(),
                    iterator.Operand.GetDocumentRange());

                var endRange = new TextRange(textControl.Caret.Offset());
                var session  = myTemplatesManager.CreateHotspotSessionAtopExistingText(
                    newStatement.GetSolution(), endRange, textControl,
                    LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, variableNameInfo);

                session.Execute();
            }
Example #6
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();
        }
Example #7
0
            protected override void AfterComplete(ITextControl textControl, IInvocationExpression expression)
            {
                var invocationRange = expression.InvokedExpression.GetDocumentRange();
                var languageType    = expression.Language;
                var hotspotInfo     = new HotspotInfo(new TemplateField("Method", 0), invocationRange);

                var argumentRange = expression.Arguments[0].Value.GetDocumentRange();
                var solution      = expression.GetSolution();

                var marker = argumentRange.EndOffsetRange().CreateRangeMarker();
                var length = (marker.Range.EndOffset - invocationRange.TextRange.EndOffset);

                var liveTemplatesManager = Info.ExecutionContext.LiveTemplatesManager;
                var session = liveTemplatesManager.CreateHotspotSessionAtopExistingText(
                    expression.GetSolution(), TextRange.InvalidRange, textControl,
                    LiveTemplatesManager.EscapeAction.RestoreToOriginalText, hotspotInfo);

                var settings            = expression.GetSettingsStore();
                var invokeParameterInfo = settings.GetValue(PostfixTemplatesSettingsAccessor.InvokeParameterInfo);

                textControl.PutData(PostfixArgTemplateExpansion, string.Empty);

                session.Closed.Advise(EternalLifetime.Instance, _ =>
                {
                    textControl.PutData(PostfixArgTemplateExpansion, null);

                    using (ReadLockCookie.Create())
                    {
                        var hotspotRange = session.Hotspots[0].RangeMarker.Range;
                        if (!hotspotRange.IsValid)
                        {
                            return;
                        }

                        solution.GetPsiServices().Files.CommitAllDocuments();

                        if (TryPlaceCaretSmart(solution, textControl, languageType, hotspotRange))
                        {
                            return;
                        }

                        var endOffset = hotspotRange.EndOffset + length;
                        textControl.Caret.MoveTo(endOffset, CaretVisualPlacement.DontScrollIfVisible);

                        if (invokeParameterInfo)
                        {
                            var lookupItemsOwner = Info.ExecutionContext.LookupItemsOwner;
                            LookupUtil.ShowParameterInfo(solution, textControl, lookupItemsOwner);
                        }
                    }
                });

                session.Execute();
            }
            protected override void AfterComplete(ITextControl textControl, IInvocationExpression expression)
            {
                var parseReference = (IReferenceExpression)expression.InvokedExpression;
                var typeQualifier  = parseReference.QualifierExpression.NotNull();

                var solution  = expression.GetSolution();
                var psiModule = typeQualifier.GetPsiModule();

                var typesWithParsers   = GetTypesWithParsers(typeQualifier);
                var templateExpression = new TypeTemplateExpression(typesWithParsers, psiModule, CSharpLanguage.Instance);
                var templateField      = new TemplateField("type", templateExpression, 0);

                var hotspotInfo = new HotspotInfo(templateField, typeQualifier.GetDocumentRange());

                var argumentsRange = expression.ArgumentList.GetDocumentRange();

                var endSelectionRange = argumentsRange.EndOffsetRange().TextRange;
                var session           = myTemplatesManager.CreateHotspotSessionAtopExistingText(
                    solution, endSelectionRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, hotspotInfo);

                var settingsStore       = expression.GetSettingsStore();
                var invokeParameterInfo = settingsStore.GetValue(PostfixSettingsAccessor.InvokeParameterInfo);

                session.Closed.Advise(Lifetime, args =>
                {
                    if (myIsTryParse)
                    {
                        var shellLocks = solution.GetComponent <IShellLocks>();
                        shellLocks.QueueReadLock("Smart completion for .tryparse", () =>
                        {
#if RESHARPER8
                            var intellisenseManager = solution.GetComponent <IntellisenseManager>();
#elif RESHARPER9
                            var intellisenseManager = solution.GetComponent <ICodeCompletionSessionManager>();
#endif
                            intellisenseManager.ExecuteManualCompletion(
                                CodeCompletionType.SmartCompletion, textControl, solution, EmptyAction.Instance,
                                intellisenseManager.GetPrimaryEvaluationMode(CodeCompletionType.SmartCompletion),
                                AutocompletionBehaviour.DoNotAutocomplete);
                        });
                    }

                    if (invokeParameterInfo)
                    {
                        using (ReadLockCookie.Create())
                        {
                            LookupUtil.ShowParameterInfo(solution, textControl, myLookupItemsOwner);
                        }
                    }
                });

                session.Execute();
            }
Example #9
0
            protected override void AfterComplete(ITextControl textControl, IExpressionStatement statement)
            {
                var expression    = (IAssignmentExpression)statement.Expression;
                var templateField = new TemplateField("target", 0);
                var hotspotInfo   = new HotspotInfo(templateField, expression.Dest.GetDocumentRange());

                var endRange = statement.GetDocumentRange().EndOffsetRange().TextRange;
                var session  = Info.ExecutionContext.LiveTemplatesManager.CreateHotspotSessionAtopExistingText(
                    statement.GetSolution(), endRange, textControl,
                    LiveTemplatesManager.EscapeAction.RestoreToOriginalText, hotspotInfo);

                session.Execute();
            }
Example #10
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();
            }
Example #11
0
        private static HotspotInfo[] CreateHotspots(
            [NotNull] IInvocationExpression invocation,
            ref LocalList <IDeclarationStatement> declarations,
            ref LocalList <IList <string> > variableNameSuggestions)
        {
            bool isTypeInferenceSupported = invocation.IsCSharp3Supported();

            if (isTypeInferenceSupported)
            {
                var hotspots = new HotspotInfo[declarations.Count * 2];

                for (int i = 0; i < declarations.Count - 1; i++)
                {
                    hotspots[2 * i]     = CreateVariableTypeHotspot(declarations[i]);
                    hotspots[2 * i + 1] = CreateVariableNameHotspot(declarations[i], declarations[i + 1], variableNameSuggestions[i]);
                }

                var lastDeclaration = declarations[declarations.Count - 1];
                var lastSuggestions = variableNameSuggestions[variableNameSuggestions.Count - 1];

                hotspots[hotspots.Length - 2] = CreateVariableTypeHotspot(lastDeclaration);
                hotspots[hotspots.Length - 1] = CreateVariableNameHotspot(lastDeclaration, invocation, lastSuggestions);

                return(hotspots);
            }
            else
            {
                var hotspots = new HotspotInfo[declarations.Count];

                for (int i = 0; i < hotspots.Length - 1; i++)
                {
                    hotspots[i] = CreateVariableNameHotspot(declarations[i], declarations[i + 1], variableNameSuggestions[i]);
                }

                var lastDeclaration = declarations[declarations.Count - 1];
                var lastSuggestions = variableNameSuggestions[variableNameSuggestions.Count - 1];

                hotspots[hotspots.Length - 1] = CreateVariableNameHotspot(lastDeclaration, invocation, lastSuggestions);

                return(hotspots);
            }
        }
    private static HotspotInfo[] CreateHotspots(
      [NotNull] IInvocationExpression invocation, 
      ref LocalList<IDeclarationStatement> declarations,
      ref LocalList<IList<string>> variableNameSuggestions)
    {
      bool isTypeInferenceSupported = invocation.IsCSharp3Supported();

      if (isTypeInferenceSupported)
      {
        var hotspots = new HotspotInfo[declarations.Count * 2];

        for (int i = 0; i < declarations.Count - 1; i++)
        {
          hotspots[2 * i] = CreateVariableTypeHotspot(declarations[i]);
          hotspots[2 * i + 1] = CreateVariableNameHotspot(declarations[i], declarations[i + 1], variableNameSuggestions[i]);
        }

        var lastDeclaration = declarations[declarations.Count - 1];
        var lastSuggestions = variableNameSuggestions[variableNameSuggestions.Count - 1];

        hotspots[hotspots.Length - 2] = CreateVariableTypeHotspot(lastDeclaration);
        hotspots[hotspots.Length - 1] = CreateVariableNameHotspot(lastDeclaration, invocation, lastSuggestions);

        return hotspots;
      }
      else
      {
        var hotspots = new HotspotInfo[declarations.Count];

        for (int i = 0; i < hotspots.Length - 1; i++)
        {
          hotspots[i] = CreateVariableNameHotspot(declarations[i], declarations[i + 1], variableNameSuggestions[i]);
        }

        var lastDeclaration = declarations[declarations.Count - 1];
        var lastSuggestions = variableNameSuggestions[variableNameSuggestions.Count - 1];

        hotspots[hotspots.Length - 1] = CreateVariableNameHotspot(lastDeclaration, invocation, lastSuggestions);

        return hotspots;
      }
    }
        protected override void AfterCompletion(
      ITextControl textControl, ISolution solution, Suffix suffix,
      TextRange resultRange, string targetText, int caretOffset)
        {
            var placeholders = new List<TextRange>();
              for (var index = 0;; index++)
              {
            index = targetText.IndexOf(NamePlaceholder, index, StringComparison.Ordinal);
            if (index == -1) break;

            var range = new TextRange(resultRange.StartOffset + index);
            placeholders.Add(range.ExtendRight(NamePlaceholder.Length));
              }

              if (placeholders.Count == 0)
              {
            base.AfterCompletion(textControl, solution, suffix, resultRange, targetText, caretOffset);
              }
              else
              {
            var nameField = new TemplateField("name", new NameSuggestionsExpression(myNames), 0);
            var hotspotInfo = new HotspotInfo(nameField, placeholders);
            var endRange = new TextRange(resultRange.StartOffset + caretOffset);

            var session = LiveTemplatesManager.Instance.CreateHotspotSessionAtopExistingText(
              mySolution, endRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret, hotspotInfo);

            if (!suffix.IsEmpty)
            {
              session.HotspotUpdated += delegate
              {
            if (session.IsFinished)
              suffix.Playback(textControl);
              };
            }

            session.Execute();
              }
        }
Example #14
0
    private void UpdateMouseCursor(WidgetEvent widgetEvent)
    {
        if (widgetEvent.EventType == WidgetEvent.eEventType.mouseOver ||
            widgetEvent.EventType == WidgetEvent.eEventType.mouseOut ||
            widgetEvent.EventType == WidgetEvent.eEventType.mouseMove)
        {
            if (widgetEvent.EventSource is HotspotWidget)
            {
                HotspotWidget hotspotWidget = widgetEvent.EventSource as HotspotWidget;
                HotspotInfo   hotspotInfo   = hotspotWidget.Userdata as HotspotInfo;

                switch (hotspotInfo.hotspotType)
                {
                case eHotspotType.energy_tank:
                {
                    EnergyTankData energyTankData = hotspotInfo.hotspotEntity as EnergyTankData;

                    if (energyTankData.ownership != GameConstants.eFaction.player)
                    {
                        // If our faction doesn't control the energy tank, we'll have to hack it
                        SetMouseCursorState(eMouseCursorState.hack_energy_tank);
                    }
                    else if (energyTankData.energy > 0)
                    {
                        // If our faction does control the energy tank, then we can drain it if it has energy
                        SetMouseCursorState(eMouseCursorState.drain_energy_tank);
                    }
                    else
                    {
                        // Otherwise all we can do is walk to it
                        SetMouseCursorState(eMouseCursorState.walk);
                    }
                }
                break;

                case eHotspotType.portal:
                {
                    Point2d hotspotCenter =
                        hotspotWidget.WorldPosition.Offset(new Vector2d(hotspotWidget.Width / 2.0f, hotspotWidget.Height / 2.0f));
                    Point2d  screenCenter    = new Point2d(Screen.width / 2.0f, Screen.height / 2.0f);
                    Vector2d vectorToHotspot = hotspotCenter - screenCenter;

                    MathConstants.eDirection currentHotspotDirection = MathConstants.GetDirectionForVector(vectorToHotspot);

                    switch (currentHotspotDirection)
                    {
                    case MathConstants.eDirection.left:
                        SetMouseCursorState(eMouseCursorState.door_left);
                        break;

                    case MathConstants.eDirection.right:
                        SetMouseCursorState(eMouseCursorState.door_right);
                        break;

                    case MathConstants.eDirection.up:
                        SetMouseCursorState(eMouseCursorState.door_up);
                        break;

                    case MathConstants.eDirection.down:
                        SetMouseCursorState(eMouseCursorState.door_down);
                        break;

                    default:
                        SetMouseCursorState(eMouseCursorState.walk);
                        break;
                    }
                }
                break;

                default:
                {
                    SetMouseCursorState(eMouseCursorState.defaultCursor);
                }
                break;
                }
            }
            else if (widgetEvent.EventSource is TileGridWidget)
            {
                if (m_currentNavRef.IsValid)
                {
                    SetMouseCursorState(eMouseCursorState.walk);
                }
                else
                {
                    SetMouseCursorState(eMouseCursorState.defaultCursor);
                }
            }
            else
            {
                SetMouseCursorState(eMouseCursorState.defaultCursor);
            }
        }
    }
        private Action<ITextControl> MarkInsertedDescription(ISolution solution, ExceptionDocCommentModel insertedExceptionModel)
        {
            var exceptionCommentRange = insertedExceptionModel.GetMarkerRange();
            if (exceptionCommentRange == DocumentRange.InvalidRange)
                return null;

            var copyExceptionDescription =
                string.IsNullOrEmpty(insertedExceptionModel.ExceptionDescription) ||
                insertedExceptionModel.ExceptionDescription.Contains("[MARKER]");

            var exceptionDescription = copyExceptionDescription ? "Condition" : insertedExceptionModel.ExceptionDescription;

            var nameSuggestionsExpression = new NameSuggestionsExpression(new[] {exceptionDescription});
            var field = new TemplateField("name", nameSuggestionsExpression, 0);
            var fieldInfo = new HotspotInfo(field, exceptionCommentRange);

            return textControl =>
            {
                var hotspotSession = Shell.Instance.GetComponent<LiveTemplatesManager>()
                    .CreateHotspotSessionAtopExistingText(
                        solution, TextRange.InvalidRange, textControl, LiveTemplatesManager.EscapeAction.LeaveTextAndCaret,
                        new[] {fieldInfo});

                hotspotSession.Execute();
            };
        }