Bug 313017

Summary: NPE in DocumentMerger.doDiff
Product: [Eclipse Project] Platform Reporter: James Blackburn <jamesblackburn+eclipse>
Component: CompareAssignee: Platform-Compare-Inbox <platform-compare-inbox>
Status: CLOSED WONTFIX QA Contact:
Severity: normal    
Priority: P3 CC: adietish, knutolav+eclipse, peblpebl, phil_fj12
Version: 3.6   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard: stalebug
Bug Depends on: 304693    
Bug Blocks:    

Description James Blackburn CLA 2010-05-15 12:15:53 EDT
Using 3.6M7 I synchronized a project shared with CVS, looked at a diff, then updated the project in the synchronize view.  A NPE then occurred with a dialog brought to focus:


java.lang.NullPointerException
	at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:462)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3275)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4982)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$2.runInUIThread(TextMergeViewer.java:1046)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
Comment 1 James Blackburn CLA 2010-05-15 12:16:53 EDT
Another exception logged at the same time:

org.eclipse.swt.SWTException: Graphic is disposed
	at org.eclipse.swt.SWT.error(SWT.java:4083)
	at org.eclipse.swt.SWT.error(SWT.java:3998)
	at org.eclipse.swt.SWT.error(SWT.java:3969)
	at org.eclipse.swt.graphics.Image.getBounds(Image.java:821)
	at org.eclipse.swt.custom.CLabel.getTotalSize(CLabel.java:262)
	at org.eclipse.swt.custom.CLabel.computeSize(CLabel.java:161)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.getHeaderHeight(ContentMergeViewer.java:1129)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.getViewportHeight(TextMergeViewer.java:4722)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateVScrollBar(TextMergeViewer.java:4822)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateLines(TextMergeViewer.java:3849)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.documentChanged(TextMergeViewer.java:2957)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.access$15(TextMergeViewer.java:2945)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.documentChanged(TextMergeViewer.java:1146)
	at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:769)
	at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736)
	at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721)
	at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796)
	at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237)
	at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:223)
	at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.handleFileContentChanged(ResourceTextFileBuffer.java:508)
	at org.eclipse.core.internal.filebuffers.ResourceFileBuffer$2.execute(ResourceFileBuffer.java:151)
	at org.eclipse.core.internal.filebuffers.ResourceFileBuffer$SafeFileChange.run(ResourceFileBuffer.java:86)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
Comment 2 Tomasz Zarna CLA 2010-05-17 08:23:43 EDT
This may have the same reason as bug 273951, i.e. the editor is closed while update is still taking place. From our observation this is most likely to happen on dual-core machines. Bug 304693 is about improving the editor to be multi-threading-proof or even better to take advantage of multi-threading.
Comment 3 James Blackburn CLA 2010-05-17 08:54:17 EDT
(In reply to comment #2)
> From our observation this is most likely to
> happen on dual-core machines. Bug 304693 is about improving the editor to be
> multi-threading-proof or even better to take advantage of multi-threading.

Ok, sounds plausible as I'm on an 8-core machine here.
Comment 4 Peter Larsen CLA 2011-06-21 07:36:28 EDT
Not sure if this is the same, but I get this several times daily (intel xeon quad core E5420).


!ENTRY org.eclipse.ui 4 4 2011-06-21 13:20:20.940
!MESSAGE An internal error has occurred.
!STACK 0
java.lang.NullPointerException
	at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:494)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3275)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4999)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$2.runInUIThread(TextMergeViewer.java:1046)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388)
	at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507)
	at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:275)
	at org.eclipse.ui.internal.progress.ProgressManager$5.run(ProgressManager.java:960)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:995)
	at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:970)
	at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:1166)
	at org.eclipse.compare.internal.CompareContainer.run(CompareContainer.java:80)
	at org.eclipse.compare.CompareEditorInput.run(CompareEditorInput.java:1406)
	at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:460)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3275)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4999)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$2.runInUIThread(TextMergeViewer.java:1046)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Comment 5 Knut-Olav Hoven CLA 2012-10-05 06:03:25 EDT
Same in Eclipse 4.2



!ENTRY org.eclipse.team.ui 4 2 2012-10-05 11:53:34.704
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.team.ui".
!STACK 0
java.lang.NullPointerException
        at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:494)
        at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3275)
        at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4999)
        at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:2847)
        at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:743)
        at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.refresh(ContentMergeViewer.java:718)
        at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.handleCompareInputChange(ContentMergeViewer.java:1312)
        at org.eclipse.compare.contentmergeviewer.TextMergeViewer.handleCompareInputChange(TextMergeViewer.java:4960)
        at org.eclipse.compare.contentmergeviewer.ContentMergeViewer$3.compareInputChanged(ContentMergeViewer.java:350)
        at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput$4.run(SaveableCompareEditorInput.java:320)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput.propogateInputChange(SaveableCompareEditorInput.java:318)
        at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput$1.compareInputChanged(SaveableCompareEditorInput.java:173)
        at org.eclipse.team.internal.ui.mapping.AbstractCompareInput$1.run(AbstractCompareInput.java:74)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.team.internal.ui.mapping.AbstractCompareInput.fireChange(AbstractCompareInput.java:72)
        at org.eclipse.team.internal.ui.mapping.ResourceDiffCompareInput.fireChange(ResourceDiffCompareInput.java:168)
        at org.eclipse.team.internal.ui.mapping.ResourceDiffCompareInput.update(ResourceDiffCompareInput.java:292)
        at org.eclipse.team.internal.ui.mapping.CompareInputChangeNotifier.fireChange(CompareInputChangeNotifier.java:389)
        at org.eclipse.team.internal.ui.mapping.CompareInputChangeNotifier.fireChanges(CompareInputChangeNotifier.java:295)
        at org.eclipse.team.internal.ui.mapping.CompareInputChangeNotifier$1.run(CompareInputChangeNotifier.java:253)
        at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:164)
        at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1022)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:916)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:585)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Comment 6 Andre Dietisheim CLA 2016-07-01 03:46:00 EDT
This still exists in Neon
Comment 7 Eclipse Genie CLA 2020-01-17 05:24:35 EST
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. As such, we're closing this bug.

If you have further information on the current state of the bug, please add it and reopen this bug. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.