Bug 475865 - JDT deletes code

Change-Id: I9ef2c803847b63ee63de3f52d54e8f3252f15960
Signed-off-by: Mateusz Matela <mateusz.matela@gmail.com>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
index 5cd1598..03b3428 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
@@ -11426,4 +11426,18 @@
 		"}"

 	);

 }

+/**

+ * https://bugs.eclipse.org/475865 - JDT deletes code

+ */

+public void testBug475865() {

+	String source = 

+		"public class Snippet {\r\n" + 

+		"\r\n" + 

+		"	Runnable disposeRunnable = this::dispose();\r\n" + 

+		"\r\n" + 

+		"	void dispose() {\r\n" + 

+		"	}\r\n" + 

+		"}";

+	formatSource(source);

+}

 }

diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/TokenManager.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/TokenManager.java
index aff5ee5..76f74e1 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/TokenManager.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/TokenManager.java
@@ -432,6 +432,8 @@
 		for (Token[] pair : this.formatOffTagPairs) {
 			int index1 = findIndex(pair[0].originalStart, -1, false);
 			int index2 = findIndex(pair[1].originalEnd, -1, false);
+			pair[0] = get(index1);
+			pair[1] = get(index2);
 			Token unformatted = new Token(pair[0].originalStart, pair[1].originalEnd, TokenNameWHITESPACE);
 			unformatted.setIndent(Math.min(pair[0].getIndent(), findSourcePositionInLine(pair[0].originalStart)));
 			unformatted.putLineBreaksBefore(pair[0].getLineBreaksBefore());