#56091
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java
index 6241bfc..772a10b 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java
@@ -424,8 +424,8 @@
// access documents unsynched:
// get an exclusive copy of the actual document
- reference= new Document(left.get());
- actual= new Document(right.get());
+ reference= createCopy(left);
+ actual= createCopy(right);
synchronized (DocumentLineDiffer.this) {
if (fStoredEvents.size() == 0)
@@ -510,6 +510,22 @@
fDifferences.clear();
}
+ private IDocument createCopy(IDocument document) {
+ Assert.isNotNull(document);
+ // TODO needs for sure a safer synchronization method
+ // this is a temporary workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=56091
+ int count= 0;
+ while (count < 100) {
+ try {
+ return new Document(document.get());
+ } catch (NullPointerException x) {
+ } catch (ArrayStoreException x) {
+ } catch (IndexOutOfBoundsException x) {
+ }
+ ++ count;
+ }
+ return new Document();
+ }
};
fInitializationJob.setSystem(true);