Bug 574886 - NPE in StyledText.handlePaint
Summary: NPE in StyledText.handlePaint
Status: VERIFIED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 4.21   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 4.21 M2   Edit
Assignee: Andrey Loskutov CLA
QA Contact:
URL:
Whiteboard:
Keywords: regression
Depends on:
Blocks: 562676
  Show dependency tree
 
Reported: 2021-07-16 06:43 EDT by Christian Dietrich CLA
Modified: 2021-07-17 02:49 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Dietrich CLA 2021-07-16 06:43:43 EDT
we see this npe in our xtext-eclipse test with 4.21 target

!ENTRY org.eclipse.ui 4 0 2021-07-16 08:21:18.043
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException
	at org.eclipse.swt.custom.StyledText.handlePaint(StyledText.java:6410)
	at org.eclipse.swt.custom.StyledText.lambda$28(StyledText.java:5923)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5899)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1443)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1469)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1452)
	at org.eclipse.swt.widgets.Control.gtk_draw(Control.java:3910)
	at org.eclipse.swt.widgets.Scrollable.gtk_draw(Scrollable.java:365)
	at org.eclipse.swt.widgets.Composite.gtk_draw(Composite.java:500)
	at org.eclipse.swt.widgets.Canvas.gtk_draw(Canvas.java:181)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2301)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:6781)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:6153)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_do_event(Native Method)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1562)
	at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_iteration_do(Native Method)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4596)
	at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:126)
	at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:100)
	at org.eclipse.core.runtime.SubMonitor$RootInfo.isCanceled(SubMonitor.java:235)
	at org.eclipse.core.runtime.SubMonitor.isCanceled(SubMonitor.java:581)
	at org.eclipse.core.internal.jobs.ThreadJob.isCanceled(ThreadJob.java:147)
	at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:276)
	at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:205)
	at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:95)
	at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:299)
	at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:124)
	at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2263)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2308)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2338)
	at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131)
	at org.eclipse.xtext.ui.testing.util.IResourcesSetupUtil.createFile(IResourcesSetupUtil.java:247)
	at org.eclipse.xtext.ui.testing.util.IResourcesSetupUtil.createFile(IResourcesSetupUtil.java:225)
	at org.eclipse.xtext.ui.tests.editor.encoding.EncodingTest.testFileEncodingIsUsedInEMFResource(EncodingTest.java:42)
Comment 1 Christian Dietrich CLA 2021-07-16 06:45:37 EDT
looking at 
org.eclipse.swt.custom.StyledText.setCaret(Caret)
null seems to be a legit value for caret.
Comment 2 Christian Dietrich CLA 2021-07-16 06:46:54 EDT
e.g. as called from org.eclipse.ui.texteditor.AbstractTextEditor.updateCaret()
Comment 3 Andrey Loskutov CLA 2021-07-16 06:47:57 EDT
This is another regression from bug 562676.
@Mickael: please check.
Comment 4 Christian Dietrich CLA 2021-07-16 06:51:51 EDT
swt version used: /org.eclipse.swt.gtk.linux.x86_64_3.117.0.v20210715-1557.jar
Comment 5 Eclipse Genie CLA 2021-07-16 06:55:46 EDT
New Gerrit change created: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/183122
Comment 7 Mickael Istria CLA 2021-07-16 07:48:16 EDT
I have concerns about the merged patch as I'm not certain the implementation does respect the initial contract of setCaret(null): if I'm not mistaken, setCaret(null) is expected to reset to default system caret, while current implementation would remove all carets.
Note that it's just a 1st impression, I'll have adeeper look to verify this assption and update patch if needed.
Comment 8 Christian Dietrich CLA 2021-07-16 07:59:22 EDT
stacktrace where caret is nulled in our test

StyledText.setCaret(Caret) line: 8831	
XtextEditor(AbstractTextEditor).updateCaret() line: 6556	
XtextEditor(AbstractTextEditor).handleInsertModeChanged() line: 6595	
XtextEditor(AbstractTextEditor).initializeSourceViewer(IEditorInput) line: 4004	
XtextEditor(AbstractTextEditor).createPartControl(Composite) line: 3477	
XtextEditor(StatusTextEditor).createPartControl(Composite) line: 64	
XtextEditor(AbstractDecoratedTextEditor).createPartControl(Composite) line: 454	
XtextEditor.createPartControl(Composite) line: 538	
CompatibilityEditor(CompatibilityPart).createPartControl(IWorkbenchPart, Composite) line: 158
Comment 9 Mickael Istria CLA 2021-07-16 17:38:06 EDT
(In reply to Mickael Istria from comment #7)
> I have concerns about the merged patch as I'm not certain the implementation
> does respect the initial contract of setCaret(null): if I'm not mistaken,
> setCaret(null) is expected to reset to default system caret, while current
> implementation would remove all carets.
> Note that it's just a 1st impression, I'll have adeeper look to verify this
> assption and update patch if needed.

My mistake, implementation seems correct. A null caret seems to imply no caret wod be drawn before multi selection/caret, and the suggested patch appears to keep this behavior, so it's all good.
@Christian: please try an I-Build containing yhe patch and report whether you face further issue, and mark it as resolved/verified if you're happy with this fix.
Comment 10 Christian Dietrich CLA 2021-07-17 02:49:27 EDT
no more NPEs in our tests