From 30681a617741eda6079a9ee316e0238aa63f6ac9 Mon Sep 17 00:00:00 2001 From: Drew Noakes Date: Wed, 14 Jun 2023 11:33:31 +1000 Subject: [PATCH] Use GetContainingLineNumber() to reduce allocations Calling `GetContainingLine().LineNumber` causes `TextSnapshotLine` allocations. The `GetContainingLineNumber()` method avoids these. --- .../Core/Shared/Extensions/ITextViewExtensions.cs | 4 ++-- .../Core/Shared/Extensions/SnapshotPointExtensions.cs | 2 +- .../Test2/Rename/RenameCommandHandlerTests.vb | 2 +- .../VisualBasic/LineCommit/CommitBufferManager.vb | 2 +- .../ImplementInterfaceCommandHandlerTests.vb | 2 +- .../VisualBasicTest/LineCommit/CommitOnEnterTests.vb | 6 +++--- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/EditorFeatures/Core/Shared/Extensions/ITextViewExtensions.cs b/src/EditorFeatures/Core/Shared/Extensions/ITextViewExtensions.cs index b4fd8bae9af11..5ff5954c1721a 100644 --- a/src/EditorFeatures/Core/Shared/Extensions/ITextViewExtensions.cs +++ b/src/EditorFeatures/Core/Shared/Extensions/ITextViewExtensions.cs @@ -362,8 +362,8 @@ public static bool TryGetSurfaceBufferSpan( var visibleEnd = visibleSpansInBuffer.Last().End; var snapshot = subjectBuffer.CurrentSnapshot; - var startLine = visibleStart.GetContainingLine().LineNumber; - var endLine = visibleEnd.GetContainingLine().LineNumber; + var startLine = visibleStart.GetContainingLineNumber(); + var endLine = visibleEnd.GetContainingLineNumber(); startLine = Math.Max(startLine - extraLines, 0); endLine = Math.Min(endLine + extraLines, snapshot.LineCount - 1); diff --git a/src/EditorFeatures/Core/Shared/Extensions/SnapshotPointExtensions.cs b/src/EditorFeatures/Core/Shared/Extensions/SnapshotPointExtensions.cs index 37eb559c2882a..e6a95c92b0510 100644 --- a/src/EditorFeatures/Core/Shared/Extensions/SnapshotPointExtensions.cs +++ b/src/EditorFeatures/Core/Shared/Extensions/SnapshotPointExtensions.cs @@ -13,7 +13,7 @@ public static void GetLineAndCharacter(this SnapshotPoint point, out int lineNum => point.Snapshot.GetLineAndCharacter(point.Position, out lineNumber, out characterIndex); public static int GetContainingLineNumber(this SnapshotPoint point) - => point.GetContainingLine().LineNumber; + => point.GetContainingLineNumber(); public static ITrackingPoint CreateTrackingPoint(this SnapshotPoint point, PointTrackingMode trackingMode) => point.Snapshot.CreateTrackingPoint(point, trackingMode); diff --git a/src/EditorFeatures/Test2/Rename/RenameCommandHandlerTests.vb b/src/EditorFeatures/Test2/Rename/RenameCommandHandlerTests.vb index 621939435d6f3..13805677ce6fb 100644 --- a/src/EditorFeatures/Test2/Rename/RenameCommandHandlerTests.vb +++ b/src/EditorFeatures/Test2/Rename/RenameCommandHandlerTests.vb @@ -255,7 +255,7 @@ End Class Sub() AssertEx.Fail("Tab should not have been passed to the editor."), Utilities.TestCommandExecutionContext.Create()) - Assert.Equal(3, view.Caret.Position.BufferPosition.GetContainingLine().LineNumber) + Assert.Equal(3, view.Caret.Position.BufferPosition.GetContainingLineNumber()) session.Cancel() End Using diff --git a/src/EditorFeatures/VisualBasic/LineCommit/CommitBufferManager.vb b/src/EditorFeatures/VisualBasic/LineCommit/CommitBufferManager.vb index e6cdbf64e5006..1665f2a0db09d 100644 --- a/src/EditorFeatures/VisualBasic/LineCommit/CommitBufferManager.vb +++ b/src/EditorFeatures/VisualBasic/LineCommit/CommitBufferManager.vb @@ -222,7 +222,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LineCommit Public Shared Function IsMovementBetweenStatements(oldPoint As SnapshotPoint, newPoint As SnapshotPoint, cancellationToken As CancellationToken) As Boolean ' If they are the same line, then definitely no - If oldPoint.GetContainingLine().LineNumber = newPoint.GetContainingLine().LineNumber Then + If oldPoint.GetContainingLineNumber() = newPoint.GetContainingLineNumber() Then Return False End If diff --git a/src/EditorFeatures/VisualBasicTest/ImplementInterface/ImplementInterfaceCommandHandlerTests.vb b/src/EditorFeatures/VisualBasicTest/ImplementInterface/ImplementInterfaceCommandHandlerTests.vb index c649777af1543..0a105a3769b82 100644 --- a/src/EditorFeatures/VisualBasicTest/ImplementInterface/ImplementInterfaceCommandHandlerTests.vb +++ b/src/EditorFeatures/VisualBasicTest/ImplementInterface/ImplementInterfaceCommandHandlerTests.vb @@ -462,7 +462,7 @@ End Class End Sub, Sub(expected, actual, view) AssertEx.AssertEqualToleratingWhitespaceDifferences(expected, actual) - Assert.Equal(4, view.Caret.Position.BufferPosition.GetContainingLine().LineNumber) + Assert.Equal(4, view.Caret.Position.BufferPosition.GetContainingLineNumber()) Assert.Equal(4, view.Caret.Position.VirtualSpaces) End Sub) End Sub diff --git a/src/EditorFeatures/VisualBasicTest/LineCommit/CommitOnEnterTests.vb b/src/EditorFeatures/VisualBasicTest/LineCommit/CommitOnEnterTests.vb index 4f76935b25c2f..d2eb16148c21f 100644 --- a/src/EditorFeatures/VisualBasicTest/LineCommit/CommitOnEnterTests.vb +++ b/src/EditorFeatures/VisualBasicTest/LineCommit/CommitOnEnterTests.vb @@ -253,7 +253,7 @@ rem Hello World$$|] testData.CommandHandler.ExecuteCommand(New ReturnKeyCommandArgs(testData.View, testData.Buffer), Sub() testData.EditorOperations.InsertNewLine(), TestCommandExecutionContext.Create()) testData.UndoHistory.Undo(count:=1) - Assert.Equal(0, testData.View.Caret.Position.BufferPosition.GetContainingLine().LineNumber) + Assert.Equal(0, testData.View.Caret.Position.BufferPosition.GetContainingLineNumber()) End Using End Sub @@ -342,14 +342,14 @@ End Module Private Shared Sub AssertCommitsStatement(test As XElement, expectCommit As Boolean, Optional usedSemantics As Boolean = True) Using testData = CommitTestData.Create(test) - Dim lineNumber = testData.View.Caret.Position.BufferPosition.GetContainingLine().LineNumber + Dim lineNumber = testData.View.Caret.Position.BufferPosition.GetContainingLineNumber() testData.CommandHandler.ExecuteCommand(New ReturnKeyCommandArgs(testData.View, testData.Buffer), Sub() testData.EditorOperations.InsertNewLine(), TestCommandExecutionContext.Create()) testData.AssertHadCommit(expectCommit) If expectCommit Then testData.AssertUsedSemantics(usedSemantics) End If - Assert.Equal(lineNumber + 1, testData.View.Caret.Position.BufferPosition.GetContainingLine().LineNumber) + Assert.Equal(lineNumber + 1, testData.View.Caret.Position.BufferPosition.GetContainingLineNumber()) End Using End Sub End Class