eclipse-platform / eclipse-platform/eclipse.platform

Logged NPE in ViewerUpdateMonitor constructor

Open
#1,500 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
165
Forks
174
Avg merge
2d 8h
Merged PRs (30d)
22

Description

There is a logged NPE due to `viewerInput` being `null` in the constructor of `ViewerUpdateMonitor` when updating tree elements during `Viewer.setInput(null)`: https://github.com/eclipse-platform/eclipse.platform/blob/b469dee78f959320d018d3607d74fc24da69f7cd/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java#L86-L91

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

* Set a breakpoint at https://github.com/eclipse-platform/eclipse.platform/blob/b469dee78f959320d018d3607d74fc24da69f7cd/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java#L90
* Run one of the following tests from `org.eclipse.debug.tests`:
* `org.eclipse.debug.tests.viewer.model.JFaceViewerStateTests`
* `testSaveAndRestoreLarge()`
* `testSaveAndRestorePartialStateLarge()`
* `org.eclipse.debug.tests.viewer.model.JFaceViewerPerformanceTests`
* `testSaveAndRestore()`

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 `/.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.(ViewerUpdateMonitor.java:90)
at org.eclipse.debug.internal.ui.viewers.model.ChildrenUpdate.(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)
[...]
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.