Bug 575872 - Paste is broken

Change-Id: I509a09555789b634e956b81e89ceb1150f45af6a
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/185587
Tested-by: Platform Bot <platform-bot@eclipse.org>
Reviewed-by: Mickael Istria <mistria@redhat.com>
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 53e9c55..0154c98 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
@@ -414,10 +414,17 @@
 	public void testPasteMultiLines() {
 		fShell= new Shell();
 		TextViewer textViewer= new TextViewer(fShell, SWT.NONE);
-		textViewer.setDocument(new Document());
+		Document document= new Document();
+		textViewer.setDocument(document);
 		new Clipboard(fShell.getDisplay()).setContents(new Object[] { "a\na" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
 		textViewer.doOperation(ITextOperationTarget.PASTE);
 		assertEquals("a\na", textViewer.getTextWidget().getText());
+		//
+		document.set("a\na\na\nb");
+		textViewer.setSelectedRange(0, 6);
+		new Clipboard(fShell.getDisplay()).setContents(new Object[] { "b" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
+		textViewer.doOperation(ITextOperationTarget.PASTE);
+		assertEquals("bb", textViewer.getTextWidget().getText());
 	}
 
 	@Test
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 7938bc5..d886741 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
@@ -3981,7 +3981,7 @@
 	}
 
 	private void delete() {
-		if (!fTextWidget.getBlockSelection() && fTextWidget.getSelectionRanges().length < 2) {
+		if (!fTextWidget.getBlockSelection() && isWidgetSelectionSingleRange()) {
 			fTextWidget.invokeAction(ST.DELETE_NEXT);
 		} else {
 			wrapCompoundChange(() -> {
@@ -3997,9 +3997,13 @@
 		fireSelectionChanged(selection.x, selection.y);
 	}
 
+	private boolean isWidgetSelectionSingleRange() {
+		return fTextWidget.getSelectionRanges().length <= 2;
+	}
+
 	private void paste() {
 //		ignoreAutoEditStrategies(true);
-		if (fTextWidget.getSelectionRanges().length < 2) { // single selection
+		if (isWidgetSelectionSingleRange()) { // single selection
 			fTextWidget.paste();
 		} else {
 			wrapCompoundChange(() -> {