#63380
diff --git a/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java b/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
index fd5652a..58a5534 100644
--- a/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
+++ b/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
@@ -246,6 +246,22 @@
}
}
+ public void test3f() {
+ // test toOriginRegion
+ // test empty slave document
+
+ fMasterDocument.set("abc\n");
+ fSlaveDocument.set("");
+ addProjection(4, 0, 0);
+
+ try {
+ IRegion origin= fProjectionMapping.toOriginRegion(new Region(0, 0));
+ assertEquals(new Region(4, 0), origin); // fails, origin is (0, 4)
+ } catch (BadLocationException e) {
+ assertTrue(false);
+ }
+ }
+
public void test4() {
// test toOriginLines
diff --git a/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java b/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
index e1c0ecd..98838e2 100644
--- a/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
+++ b/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
@@ -346,8 +346,11 @@
int imageLength= imageRegion.getLength();
if (imageLength == 0) {
- if (imageOffset == 0 && getImageLength() == 0)
- return new Region(0, fMasterDocument.getLength());
+ if (imageOffset == 0) {
+ Position[] fragments= getFragments();
+ if (fragments.length == 0 || (fragments.length == 1 && fragments[0].getOffset() == 0 && fragments[0].getLength() == 0))
+ return new Region(0, fMasterDocument.getLength());
+ }
return new Region(toOriginOffset(imageOffset), 0);
}