Bug 575872 - Paste is broken

Change-Id: I88d659da7acce06359040cfc3f5537a5e85d70a7
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/185178
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 9de19b4..e07f094 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
@@ -31,6 +31,10 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.custom.StyledTextContent;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
@@ -432,4 +436,14 @@
 			shell.dispose();
 		}
 	}
+
+	@Test
+	public void testPasteMultiLines() {
+		Shell shell= new Shell();
+		TextViewer textViewer= new TextViewer(shell, SWT.NONE);
+		textViewer.setDocument(new Document());
+		new Clipboard(shell.getDisplay()).setContents(new Object[] { "a\na" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
+		textViewer.doOperation(ITextOperationTarget.PASTE);
+		assertEquals("a\na", textViewer.getTextWidget().getText());
+	}
 }
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
index 8dfadea..f2ab696 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
@@ -1033,7 +1033,7 @@
 	private <T extends ISelection> Implementation<T> getImplementation(ISelection selection) {
 		if (selection instanceof IBlockTextSelection) {
 			return (Implementation<T>) COLUMN_IMPLEMENTATION;
-		} else if (selection instanceof IMultiTextSelection) {
+		} else if (selection instanceof IMultiTextSelection && ((IMultiTextSelection)selection).getRegions().length > 1) {
 			return (Implementation<T>) RANGES_IMPLEMENTATION;
 		} else if (selection instanceof ITextSelection) {
 			return (Implementation<T>) RANGE_IMPLEMENTATION;