Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMickael Istria2021-09-10 10:17:53 +0000
committerMickael Istria2021-09-10 10:37:01 +0000
commit3e782e2a9864f4bfcaa37f20933cd153d1428fbb (patch)
tree342fac9644abae8a616f016e704c8d7f110c0221
parentdd2e090fe73d992b49c8892e4039dcd6844c3955 (diff)
downloadeclipse.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.java9
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java5
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()))

Back to the top