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(); }); }
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; } } }
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(); }
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, 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(); }
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(); }
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(); }
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(); } }
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(); }; }