Skip to content

Commit 91383e0

Browse files
Fix IllegalArgumentException when styling the sticky lines
When the sticky lines are limited by the settings, the not visible sticky lines should not be styled. Fixes #2496
1 parent 136afb4 commit 91383e0

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,20 @@ private void styleStickyLines() {
242242
return;
243243
}
244244

245-
int stickyLineOffset= 0;
246-
List<StyleRange> styleRanges= new ArrayList<>();
247-
for (IStickyLine stickyLine : stickyLines) {
245+
List<StyleRange> stickyLinesStyleRanges= new ArrayList<>();
246+
int stickyLineTextOffset= 0;
247+
for (int i= 0; i < getNumberStickyLines(); i++) {
248+
IStickyLine stickyLine= stickyLines.get(i);
248249
StyleRange[] ranges= stickyLine.getStyleRanges();
249250
if (ranges != null) {
250251
for (StyleRange styleRange : ranges) {
251-
styleRange.start+= stickyLineOffset;
252-
styleRanges.add(styleRange);
252+
styleRange.start+= stickyLineTextOffset;
253+
stickyLinesStyleRanges.add(styleRange);
253254
}
254255
}
255-
256-
stickyLineOffset+= stickyLine.getText().length() + System.lineSeparator().length();
256+
stickyLineTextOffset+= stickyLine.getText().length() + System.lineSeparator().length();
257257
}
258-
stickyLineText.setStyleRanges(styleRanges.toArray(StyleRange[]::new));
258+
stickyLineText.setStyleRanges(stickyLinesStyleRanges.toArray(StyleRange[]::new));
259259

260260
stickyLineNumber.setFont(textWidget.getFont());
261261
stickyLineNumber.setStyleRange(new StyleRange(0, stickyLineNumber.getText().length(), settings.lineNumberColor(), null));

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,29 @@ public void testCopyStyleRanges() {
182182
assertEquals(separatorColor, styleRanges[1].background);
183183
}
184184

185+
@Test
186+
public void testCopyStyleRangesWithLimitedStickyLines() {
187+
settings = new StickyScrollingControlSettings(1, lineNumberColor, hoverColor, backgroundColor, separatorColor,
188+
true);
189+
stickyScrollingControl.applySettings(settings);
190+
191+
StyleRange styleRangeLine1 = new StyleRange(0, 1, lineNumberColor, backgroundColor);
192+
StyleRange styleRangeLine2 = new StyleRange(0, 2, hoverColor, separatorColor);
193+
List<IStickyLine> stickyLines = List.of(//
194+
new StickyLineStub("line 1", 0, new StyleRange[] { styleRangeLine1 }),
195+
new StickyLineStub("line 2", 0, new StyleRange[] { styleRangeLine2 }));
196+
stickyScrollingControl.setStickyLines(stickyLines);
197+
198+
StyledText stickyLineText = getStickyLineText();
199+
200+
StyleRange[] styleRanges = stickyLineText.getStyleRanges();
201+
assertEquals(1, styleRanges.length);
202+
assertEquals(0, styleRanges[0].start);
203+
assertEquals(1, styleRanges[0].length);
204+
assertEquals(lineNumberColor, styleRanges[0].foreground);
205+
assertEquals(backgroundColor, styleRanges[0].background);
206+
}
207+
185208
@Test
186209
public void testWithoutVerticalRuler() {
187210
sourceViewer = new SourceViewer(shell, null, SWT.None);

0 commit comments

Comments
 (0)