Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 571954

Summary: Replace obsolete BufferedCanvas with standard SWT Buffering
Product: [Eclipse Project] Platform Reporter: Lars Vogel <Lars.Vogel>
Component: CompareAssignee: Lars Vogel <Lars.Vogel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: Lars.Vogel, loskutov, nikita, sebastian.ratz
Version: 4.17   
Target Milestone: 4.20 M1   
Hardware: PC   
OS: Windows 10   
See Also: https://bugs.eclipse.org/bugs/show_bug.cgi?id=571536
https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/177924
https://git.eclipse.org/c/platform/eclipse.platform.team.git/commit/?id=e534a45caef77d7c4d52cb1473501c0bc2252ea6
https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/178918
https://git.eclipse.org/c/platform/eclipse.platform.team.git/commit/?id=47b7817b4f9c1ea7716cf48e21f7e8648747ca94
Whiteboard:
Bug Depends on:    
Bug Blocks: 571430, 572036    

Comment 1 Eclipse Genie CLA 2021-03-17 11:24:59 EDT
New Gerrit change created: https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/177924
Comment 3 Sebastian Ratz CLA 2021-04-06 12:49:12 EDT
This change caused

java.lang.NullPointerException: Cannot invoke "org.eclipse.compare.internal.MergeSourceViewer.getSourceViewer()" because "this.fLeft" is null
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.paintCenter(TextMergeViewer.java:4267)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer$17.paintControl(TextMergeViewer.java:2464)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4209)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1043)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1067)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052)
	at org.eclipse.swt.widgets.Composite.WM_PRINTCLIENT(Composite.java:1693)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4825)
	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.CallWindowProc(Native Method)
	at org.eclipse.swt.widgets.Button.callWindowProc(Button.java:256)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4861)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4938)
	at org.eclipse.swt.internal.win32.OS.SetWindowText(Native Method)
	at org.eclipse.swt.internal.win32.OS.SetWindowText(OS.java:2230)
	at org.eclipse.swt.widgets.Button._setText(Button.java:209)
	at org.eclipse.swt.widgets.Button.setText(Button.java:1029)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.createCenterControl(TextMergeViewer.java:2490)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.buildControl(ContentMergeViewer.java:867)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.<init>(TextMergeViewer.java:1626)
	at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer.<init>(JavaMergeViewer.java:101)
	at org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator.createViewer(JavaContentViewerCreator.java:32)
	at org.eclipse.compare.internal.ViewerDescriptor.createViewer(ViewerDescriptor.java:66)
	at org.eclipse.compare.internal.CompareUIPlugin.getViewer(CompareUIPlugin.java:1103)
	at org.eclipse.compare.internal.CompareUIPlugin.findContentViewer(CompareUIPlugin.java:1098)
	at org.eclipse.compare.CompareUI.findContentViewer(CompareUI.java:338)
	at org.eclipse.compare.CompareEditorInput.findContentViewer(CompareEditorInput.java:916)
	at org.eclipse.team.ui.synchronize.SaveableCompareEditorInput.findContentViewer(SaveableCompareEditorInput.java:485)
	at org.eclipse.compare.internal.CompareContentViewerSwitchingPane.getViewer(CompareContentViewerSwitchingPane.java:99)
	at org.eclipse.compare.CompareViewerSwitchingPane.setInput(CompareViewerSwitchingPane.java:257)
	at org.eclipse.compare.internal.CompareContentViewerSwitchingPane.setInput(CompareContentViewerSwitchingPane.java:202)
	at org.eclipse.compare.CompareEditorInput.internalSetContentPaneInput(CompareEditorInput.java:806)
	at org.eclipse.compare.CompareEditorInput.lambda$8(CompareEditorInput.java:747)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
	at org.eclipse.compare.CompareEditorInput.feed1(CompareEditorInput.java:742)
	at org.eclipse.compare.CompareEditorInput.feedInput(CompareEditorInput.java:720)
	at org.eclipse.compare.CompareEditorInput.createContents(CompareEditorInput.java:543)
	at org.eclipse.compare.internal.CompareEditor.createCompareControl(CompareEditor.java:448)
	at org.eclipse.compare.internal.CompareEditor$1.lambda$0(CompareEditor.java:366)
	at org.eclipse.ui.internal.PendingSyncExec.run(PendingSyncExec.java:68)
	at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:171)
	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.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:64)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	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)



It seems the paint event can occur earlier than the old doPaint() method. Even before all the controls have been created.
Comment 4 Eclipse Genie CLA 2021-04-06 12:50:05 EDT
New Gerrit change created: https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/178918
Comment 5 Andrey Loskutov CLA 2021-04-06 12:53:51 EDT
(In reply to Eclipse Genie from comment #4)
> New Gerrit change created:
> https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/178918

Reopened for the patch above. 
@Sebastian: could you provide steps to reproduce / stack trace?
Comment 6 Sebastian Ratz CLA 2021-04-06 12:59:56 EDT
(In reply to Andrey Loskutov from comment #5)
> (In reply to Eclipse Genie from comment #4)
> > New Gerrit change created:
> > https://git.eclipse.org/r/c/platform/eclipse.platform.team/+/178918
> 
> Reopened for the patch above. 
> @Sebastian: could you provide steps to reproduce / stack trace?

Right clicking in a .java file -> Compare with -> Previous Revision:

Functionally, nothing is broken, but two NPEs are logged in the error view for the early events.

It might be a Windows-only thing.
Comment 7 Andrey Loskutov CLA 2021-04-06 14:30:17 EDT
(In reply to Sebastian Ratz from comment #6)
> > @Sebastian: could you provide steps to reproduce / stack trace?
> 
> Right clicking in a .java file -> Compare with -> Previous Revision:
> 
> Functionally, nothing is broken, but two NPEs are logged in the error view
> for the early events.
> 
> It might be a Windows-only thing.

OK, thanks. We should merge that for M1.