Bug 570714 - NPE in DocumentMerge
Summary: NPE in DocumentMerge
Status: NEW
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Compare (show other bugs)
Version: 4.18   Edit
Hardware: PC Windows 10
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-Compare-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: needinfo
: 304941 571506 (view as bug list)
Depends on:
Blocks:
 
Reported: 2021-01-28 08:42 EST by Rolf Theunissen CLA
Modified: 2021-02-25 08:21 EST (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rolf Theunissen CLA 2021-01-28 08:42:41 EST
I opened a diff view from the git staging view. In that Java diff I start editing code. After saving the file I get the following NPE.

I don't know if there are any other pre-conditions on what should be edited or how often should be saved. I had the exceptions a couple of times, even after reopening the editor. After closing all editors I cannot re-trigger it though.


java.lang.NullPointerException
	at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:451)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3510)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:5364)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$16.runInUIThread(TextMergeViewer.java:2402)
	at org.eclipse.ui.progress.UIJob.lambda$0(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4001)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3629)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:166)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:368)
	at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:468)
	at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:228)
	at org.eclipse.ui.internal.progress.ProgressManager.lambda$26(ProgressManager.java:821)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
	at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:854)
	at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:830)
	at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:988)
	at org.eclipse.compare.internal.Utilities.executeRunnable(Utilities.java:948)
	at org.eclipse.compare.internal.CompareContainer.run(CompareContainer.java:70)
	at org.eclipse.compare.CompareEditorInput.run(CompareEditorInput.java:1317)
	at org.eclipse.compare.internal.merge.DocumentMerger.doDiff(DocumentMerger.java:417)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.doDiff(TextMergeViewer.java:3510)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:5364)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:3023)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:793)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.refresh(ContentMergeViewer.java:769)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.handleCompareInputChange(ContentMergeViewer.java:1388)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.handleCompareInputChange(TextMergeViewer.java:5325)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.lambda$1(ContentMergeViewer.java:390)
	at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput$1.run(SaveableCompareEditorInput.java:386)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput.propogateInputChange(SaveableCompareEditorInput.java:383)
	at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput.lambda$0(SaveableCompareEditorInput.java:223)
	at org.eclipse.compare.structuremergeviewer.DiffNode.fireChange(DiffNode.java:140)
	at org.eclipse.egit.ui.internal.revision.NotifiableDiffNode.fireChange(NotifiableDiffNode.java:28)
	at org.eclipse.egit.ui.internal.revision.GitCompareFileRevisionEditorInput.fireInputChange(GitCompareFileRevisionEditorInput.java:410)
	at org.eclipse.egit.ui.internal.revision.GitCompareFileRevisionEditorInput$InternalResourceSaveableComparison.fireInputChange(GitCompareFileRevisionEditorInput.java:582)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceSaveableComparison.performSave(LocalResourceSaveableComparison.java:154)
	at org.eclipse.egit.ui.internal.revision.GitCompareFileRevisionEditorInput$InternalResourceSaveableComparison.doSave(GitCompareFileRevisionEditorInput.java:660)
	at org.eclipse.ui.Saveable.doSave(Saveable.java:213)
	at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:333)
	at org.eclipse.ui.internal.SaveableHelper.lambda$1(SaveableHelper.java:196)
	at org.eclipse.ui.internal.SaveableHelper.lambda$3(SaveableHelper.java:271)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:436)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:352)
	at org.eclipse.ui.internal.WorkbenchWindow.lambda$7(WorkbenchWindow.java:2347)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2345)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:278)
	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:260)
	at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:207)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:150)
	at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3820)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3833)
	at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:81)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
	at jdk.internal.reflect.GeneratedMethodAccessor309.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:319)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:253)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:584)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:653)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:443)
	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1268)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1036)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1046)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1088)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1084)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1513)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4884)
	at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4762)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4930)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3624)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1461)
Comment 1 Andrey Loskutov CLA 2021-01-28 09:01:55 EST
Could be related to some egit. We need exact steps to reproduce.
Comment 2 Matthias Sohn CLA 2021-01-28 09:19:49 EST
which version of eclipse, jgit, egit were used here ?
Comment 3 Thomas Wolf CLA 2021-01-28 09:24:30 EST
I was just about to thank Rolf for *not* reporting this against EGit. Unlikely that this is an EGit problem.

This is a strange stack trace. The TextMergeViewer is doing a diff because you saved, but from an earlier setFocus() it has still an UI job to do the diff and then tries to diff again even though a diff is already ongoing. Moreover, I don't see how there can be an NPE at DocumentMerger:451. (Could happen only if the array 'e' was null, but how could that happen?)

TextMergeViewer has some logic with a fRedoDiff flag that is set to true if one side becomes non-dirty. Looks like that is not always right? It shouldn't try to do an update while an update was already in progress.
Comment 4 Rolf Theunissen CLA 2021-01-30 11:01:04 EST
I don't have exact steps to reproduce, the problem disappeared for me as well after some consistent triggering. I was editing a file with some merge conflicts. 

I agree with the analysis of Thomas, seems very odd issue.

For completeness, EGit/JGit version: 5.10.2012080955-r
Comment 5 Matthias Sohn CLA 2021-01-30 12:10:40 EST
(In reply to Rolf Theunissen from comment #4)
> I don't have exact steps to reproduce, the problem disappeared for me as
> well after some consistent triggering. I was editing a file with some merge
> conflicts. 
> 
> I agree with the analysis of Thomas, seems very odd issue.
> 
> For completeness, EGit/JGit version: 5.10.2012080955-r

this version does not exist, I guess you mean 5.10.0.202012080955-r
Comment 6 Thomas Wolf CLA 2021-02-01 06:03:41 EST
Moving back to Platform/Compare.
Comment 7 Thomas Wolf CLA 2021-02-25 07:56:15 EST
*** Bug 571506 has been marked as a duplicate of this bug. ***
Comment 8 Thomas Wolf CLA 2021-02-25 08:11:24 EST
See also earlier reports: bug 241107, bug 304693, bug 304941, bug 313017, bug 338541, bug 428074, bug 468726.
Comment 9 Lars Vogel CLA 2021-02-25 08:21:01 EST
*** Bug 304941 has been marked as a duplicate of this bug. ***