Skip to content

Commit bd93b33

Browse files
[StickyScrolling] Prevent out of bounds errors by validating sticky line number
Handle cases where the sticky line number exceeds the total number of lines to prevent out of bounds errors. Since widgetLineNumber is 0-based, ensure it is not equal to or greater than the line count. Fixes #2765
1 parent 9f3733a commit bd93b33

File tree

4 files changed

+7
-5
lines changed

4 files changed

+7
-5
lines changed

bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyLine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public StyleRange[] getStyleRanges() {
5555
StyledText textWidget= sourceViewer.getTextWidget();
5656
int widgetLineNumber = getWidgetLineNumber();
5757

58-
if (widgetLineNumber > textWidget.getLineCount()) {
58+
if (widgetLineNumber >= textWidget.getLineCount()) {
5959
return null;
6060
}
6161

bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ public void controlMoved(ControlEvent e) {
441441
private boolean areStickyLinesOutDated(StyledText textWidget) {
442442
if (stickyLines.size() > 0) {
443443
int lastStickyLineNumber = stickyLines.get(stickyLines.size() - 1).getLineNumber();
444-
return lastStickyLineNumber > textWidget.getLineCount();
444+
return lastStickyLineNumber >= textWidget.getLineCount();
445445
}
446446
return false;
447447
}

tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyLineTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,10 @@ public void testGetStyleRangesIgnoresOutOfBoundLines() {
100100
textWidget.setText("line1\nline2\nline3");
101101

102102
StickyLine stickyLineOutOfBound = new StickyLine(10, sourceViewer);
103-
StyleRange[] styleRanges = stickyLineOutOfBound.getStyleRanges();
103+
assertNull(stickyLineOutOfBound.getStyleRanges());
104104

105-
assertNull(styleRanges);
105+
stickyLineOutOfBound = new StickyLine(3, sourceViewer);
106+
assertNull(stickyLineOutOfBound.getStyleRanges());
106107
}
107108

108109
@Test

tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControlTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public void testLayoutStickyLinesCanvasOnResize() {
256256
public void testDontLayoutOutDatedStickyLinesOnResize() {
257257
sourceViewer.getTextWidget().setBounds(0, 0, 200, 200);
258258

259-
List<IStickyLine> stickyLines = List.of(new StickyLineStub("line 10", 10));
259+
List<IStickyLine> stickyLines = List.of(new StickyLineStub("line 1", 1));
260260
stickyScrollingControl.setStickyLines(stickyLines);
261261

262262
Canvas stickyControlCanvas = getStickyControlCanvas(shell);
@@ -329,6 +329,7 @@ public void testHorizontalScrollingIsDispatched() {
329329
@Test
330330
public void testLimitStickyLinesToTextWidgetHeight() {
331331
sourceViewer.getTextWidget().setBounds(0, 0, 200, 200);
332+
sourceViewer.getTextWidget().setText("line1\nline2");
332333
List<IStickyLine> stickyLines = List.of(new StickyLineStub("line 2", 1));
333334
stickyScrollingControl.setStickyLines(stickyLines);
334335

0 commit comments

Comments
 (0)