public static ISelectedIssueLocationTag CreateSelectedLocationTag(IAnalysisIssueLocationVisualization locViz) { var tagMock = new Mock <ISelectedIssueLocationTag>(); tagMock.Setup(x => x.Location).Returns(locViz); return(tagMock.Object); }
public bool TryNavigate(IAnalysisIssueLocationVisualization locationVisualization) { if (locationVisualization == null) { throw new ArgumentNullException(nameof(locationVisualization)); } try { var textView = documentNavigator.Open(locationVisualization.CurrentFilePath); var locationSpan = GetOrCalculateLocationSpan(locationVisualization, textView); if (!locationSpan.IsEmpty) { documentNavigator.Navigate(textView, locationSpan); return(true); } } catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex)) { logger.WriteLine(Resources.ERR_OpenDocumentException, locationVisualization.CurrentFilePath, ex.Message); locationVisualization.InvalidateSpan(); } return(false); }
public SelectionChangedEventArgs(SelectionChangeLevel selectionChangeLevel, IAnalysisIssueVisualization selectedIssue, IAnalysisIssueFlowVisualization selectedFlow, IAnalysisIssueLocationVisualization selectedLocation) { SelectedIssue = selectedIssue; SelectedFlow = selectedFlow; SelectedLocation = selectedLocation; SelectionChangeLevel = selectionChangeLevel; }
public IssueLocationAdornment(IAnalysisIssueLocationVisualization locationViz, IFormattedLineSource formattedLineSource) { // We can't store the formatted line source since it might change // e.g. if the user changes the font size LocationViz = locationViz; Margin = new Thickness(3, 0, 3, 0); // Space between this UI element and the editor text Padding = new Thickness(0); // Space between the side of the control and its content BorderThickness = new Thickness(1); CornerRadius = new CornerRadius(1); // Visible content of the adornment Child = new TextBlock { Text = LocationViz.StepNumber.ToString(), FontWeight = FontWeights.SemiBold, Padding = new Thickness(4, 0, 4, 0) }; ToolTip = new TextBlock { Text = LocationViz.Location.Message }; Update(formattedLineSource); }
private void RaiseSelectionChangedEvent(SelectionChangeLevel changeLevel, IAnalysisIssueVisualization issue = null, IAnalysisIssueFlowVisualization flow = null, IAnalysisIssueLocationVisualization location = null) { selectionServiceMock.Raise(x => x.SelectionChanged += null, new SelectionChangedEventArgs(changeLevel, issue, flow, location)); }
private IssueLocationAdornment CreateAdornment(IAnalysisIssueLocationVisualization locationViz) { var adornment = new IssueLocationAdornment(locationViz, wpfTextView.FormattedLineSource); // If we don't call Measure here the tag is positioned incorrectly adornment.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity)); return(adornment); }
private FileNameLocationListItem CreateTestSubject(IAnalysisIssueLocationVisualization location) { var testSubject = new FileNameLocationListItem(location, imageServiceMock.Object, logger); testSubject.PropertyChanged += propertyChangedEventHandler.Object; return(testSubject); }
public FileNameLocationListItem(IAnalysisIssueLocationVisualization location, IVsImageService2 vsImageService, ILogger logger) { this.location = location; this.vsImageService = vsImageService; this.logger = logger; location.PropertyChanged += Location_PropertyChanged; UpdateState(); }
private IFileNameLocationListItem CreateMockFileNameListItem(IAnalysisIssueLocationVisualization location) { var listItem = Mock.Of <IFileNameLocationListItem>(); fileNameLocationListItemCreatorMock .Setup(x => x.Create(location)) .Returns(listItem); return(listItem); }
private void VerifyExceptionCaughtAndLogged(Exception setupException, IAnalysisIssueLocationVisualization location) { var result = true; Action act = () => result = testSubject.TryNavigate(location); act.Should().NotThrow(); result.Should().BeFalse(); logger.AssertPartialOutputStringExists(setupException.Message); }
private SnapshotSpan GetOrCalculateLocationSpan(IAnalysisIssueLocationVisualization locationVisualization, ITextView textView) { var shouldCalculateSpan = !locationVisualization.Span.HasValue; if (shouldCalculateSpan) { locationVisualization.Span = spanCalculator.CalculateSpan(locationVisualization.Location, textView.TextBuffer.CurrentSnapshot); } return(locationVisualization.Span.Value); }
public IssueLocationAdornment CreateOrUpdate(IAnalysisIssueLocationVisualization locationViz) { // As long as the cache is always accessed on the same thread we don't need to worry // about synchronising access to it. Currently VS is always running this code on the // main thread. The assertion is to detect if this behaviour changes. Debug.Assert(ThreadHelper.CheckAccess(), "Expected cache to be accessed on the UI thread"); if (locVizToAdornmentMap.TryGetValue(locationViz, out var existingAdornment)) { existingAdornment.Update(wpfTextView.FormattedLineSource); return(existingAdornment); } var newAdornment = CreateAdornment(locationViz); locVizToAdornmentMap[locationViz] = newAdornment; return(newAdornment); }
public IFileNameLocationListItem Create(IAnalysisIssueLocationVisualization location) { return(new FileNameLocationListItem(location, vsImageService, logger)); }
public LocationListItem(IAnalysisIssueLocationVisualization location) { Location = location; }
private void VerifyNavigation(IAnalysisIssueLocationVisualization expectedNavigation) { selectionServiceMock.VerifySet(x => x.SelectedLocation = expectedNavigation, Times.Once); }
private void SetupCurrentLocation(IAnalysisIssueLocationVisualization location) { selectionServiceMock.Setup(x => x.SelectedLocation).Returns(location); }
private static bool IsValidPrimaryLocation(IAnalysisIssueLocationVisualization locViz) => locViz is IAnalysisIssueVisualization && locViz.Span.HasValue;
public SelectedIssueLocationTag(IAnalysisIssueLocationVisualization location) { Location = location ?? throw new ArgumentNullException(nameof(location)); }
private static IMappingTagSpan <ISelectedIssueLocationTag> CreateSelectedIssueTagSpan(IAnalysisIssueLocationVisualization locViz) { var tag = CreateSelectedLocationTag(locViz); return(CreateMappingTagSpan(locViz.Span.Value.Snapshot, tag, locViz.Span.Value.Span)); }
private static ITagSpan <IIssueLocationTag> CreateTagSpan(IAnalysisIssueLocationVisualization locViz) => new TagSpan <IIssueLocationTag>(locViz.Span.Value, new IssueLocationTag(locViz));