Skip to content

Logged NPE in ViewerUpdateMonitor constructor #1500

@mx990

Description

@mx990

There is a logged NPE due to viewerInput being null in the constructor of ViewerUpdateMonitor when updating tree elements during Viewer.setInput(null):

public ViewerUpdateMonitor(TreeModelContentProvider contentProvider, Object viewerInput, TreePath elementPath, Object element, IElementContentProvider elementContentProvider, IPresentationContext context) {
fContext = context;
// Bug 380288: Catch and log a race condition where the viewer input is null.
if (viewerInput == null) {
DebugUIPlugin.log(new NullPointerException("Input to viewer update should not be null")); //$NON-NLS-1$
}

The problem originally occurred when watching a variable from the Variables view using right click->Watch, which switches from the Variables view to the Expressions view. However, I was able to reproduce the problem on master with several of the tests in org.eclipse.debug.tests.

Steps to reproduce

I expected: neither logged exception nor hit at breakpoint

But got: logged exceptions and multiple hits at breakpoint

Here is some relevant log output

From <workspace>/.metadata/.log

!ENTRY org.eclipse.debug.ui 4 120 2024-08-13 14:55:12.260
!MESSAGE Error logged from Debug UI: 
!STACK 0
java.lang.NullPointerException: Input to viewer update should not be null
	at org.eclipse.debug.internal.ui.viewers.model.ViewerUpdateMonitor.<init>(ViewerUpdateMonitor.java:90)
	at org.eclipse.debug.internal.ui.viewers.model.ChildrenUpdate.<init>(ChildrenUpdate.java:45)
	at org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider.doUpdateElement(TreeModelContentProvider.java:1190)
	at org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider.updateElement(TreeModelContentProvider.java:1762)
	at org.eclipse.jface.viewers.TreeViewer.virtualLazyUpdateWidget(TreeViewer.java:1001)
	at org.eclipse.jface.viewers.TreeViewer.lambda$1(TreeViewer.java:260)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5855)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1617)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1643)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1626)
	at org.eclipse.swt.widgets.Tree.checkData(Tree.java:372)
	at org.eclipse.swt.widgets.Tree.cellDataProc(Tree.java:304)
	at org.eclipse.swt.widgets.Display.cellDataProc(Display.java:995)
	at org.eclipse.swt.internal.gtk.GTK.gtk_tree_view_column_cell_set_cell_data(Native Method)
	at org.eclipse.swt.widgets.Tree.calculateWidth(Tree.java:443)
	at org.eclipse.swt.widgets.Tree.calculateWidth(Tree.java:518)
	at org.eclipse.swt.widgets.Tree.setScrollWidth(Tree.java:3917)
	at org.eclipse.swt.widgets.Tree.cellDataProc(Tree.java:353)
	at org.eclipse.swt.widgets.Display.cellDataProc(Display.java:995)
	at org.eclipse.swt.internal.gtk.GTK.gtk_tree_view_column_cell_set_cell_data(Native Method)
	at org.eclipse.swt.widgets.Tree.calculateWidth(Tree.java:443)
	at org.eclipse.swt.widgets.Tree.calculateWidth(Tree.java:518)
	at org.eclipse.swt.widgets.Tree.setScrollWidth(Tree.java:3917)
	at org.eclipse.swt.widgets.Tree.cellDataProc(Tree.java:353)
	at org.eclipse.swt.widgets.Display.cellDataProc(Display.java:995)
	at org.eclipse.swt.internal.gtk.GTK.gtk_tree_store_clear(Native Method)
	at org.eclipse.swt.widgets.Tree.removeAll(Tree.java:2989)
	at org.eclipse.jface.viewers.TreeViewer.removeAll(TreeViewer.java:289)
	at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$1(AbstractTreeViewer.java:1631)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1392)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:367)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1353)
	at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1627)
	at org.eclipse.debug.internal.ui.viewers.model.InternalTreeModelViewer.inputChanged(InternalTreeModelViewer.java:486)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1636)
	at org.eclipse.debug.tests.viewer.model.StateTests.testSaveAndRestoreLarge(StateTests.java:1085)
	[...]

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions