diff options
author | Mickael Istria | 2021-09-10 10:17:53 +0000 |
---|---|---|
committer | Mickael Istria | 2021-09-10 10:37:01 +0000 |
commit | 3e782e2a9864f4bfcaa37f20933cd153d1428fbb (patch) | |
tree | 342fac9644abae8a616f016e704c8d7f110c0221 | |
parent | dd2e090fe73d992b49c8892e4039dcd6844c3955 (diff) | |
download | eclipse.platform.text-3e782e2a9864f4bfcaa37f20933cd153d1428fbb.tar.gz eclipse.platform.text-3e782e2a9864f4bfcaa37f20933cd153d1428fbb.tar.xz eclipse.platform.text-3e782e2a9864f4bfcaa37f20933cd153d1428fbb.zip |
Bug 575909 - AIOOBE in StyledText.setSelection via
StructuredTextViewer.handleDispose
Change-Id: Ie3c704137368372a720abab4ff49710e29844d3b
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/185296
Tested-by: Platform Bot <platform-bot@eclipse.org>
Reviewed-by: Mickael Istria <mistria@redhat.com>
-rw-r--r-- | org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java | 9 | ||||
-rw-r--r-- | org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java | 5 |
2 files changed, 13 insertions, 1 deletions
diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java index e07f094b759..c9d83eb92f8 100644 --- a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java +++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java @@ -59,6 +59,7 @@ import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; +import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.jface.text.hyperlink.URLHyperlink; @@ -446,4 +447,12 @@ public class TextViewerTest { textViewer.doOperation(ITextOperationTarget.PASTE); assertEquals("a\na", textViewer.getTextWidget().getText()); } + + @Test + public void testSetSelectionNoDoc() { + Shell shell= new Shell(); + TextViewer textViewer= new TextViewer(shell, SWT.NONE); + textViewer.setSelection(TextSelection.emptySelection()); + // assert no exception is thrown + } } diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java index 9af2c0aaa2f..58768f9dff1 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java @@ -2299,6 +2299,9 @@ public class TextViewer extends Viewer implements .map(rangeAsArray -> new Region(rangeAsArray[0], rangeAsArray[1])) .filter(widgetRange -> widgetRange.getOffset() >= 0) .toArray(IRegion[]::new); + if (widgetSelection.length == 0) { + return; + } int[] widgetRanges= new int[2 * widgetSelection.length]; for (int i= 0; i < widgetSelection.length; i++) { widgetRanges[2 * i]= widgetSelection[i].getOffset(); @@ -2434,7 +2437,7 @@ public class TextViewer extends Viewer implements } if (reveal) revealRange(s.getOffset(), s.getLength()); - } else if (selection instanceof IMultiTextSelection) { + } else if (selection instanceof IMultiTextSelection && ((IMultiTextSelection) selection).getRegions().length > 1) { IMultiTextSelection multiSelection= (IMultiTextSelection) selection; setSelectedRanges(Arrays.stream(multiSelection.getRegions()) .map(region -> new Region(region.getOffset(), region.getLength())) |