eclipse-passage / passage

Define and control license checks and usage constraints for OSGi / RCP / IDE
https://www.eclipse.org/passage/
Eclipse Public License 2.0
6 stars 8 forks source link

NPE during IssueLicenseDialog initialization #1296

Closed eparovyshnaya closed 4 months ago

eparovyshnaya commented 4 months ago

In some sophisticated context there can appear NPE (not breaking though) on IssueLicenseDialog initialization. It is cause by surplus of confience on a late-init piece of data in general LabeledField class: widget is designed to be nullable but in several places assumed to be already initialized.

Consistent approach shoul be implemented, there must be no assumptions on late-init widget state.

java.lang.NullPointerException: Cannot invoke "org.eclipse.swt.widgets.Control.isEnabled()" because "this.widget" is null
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LabeledField.errorIfAny(LabeledField.java:76)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LicenseDataPage.validatePage(LicenseDataPage.java:61)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LicenseDataPage.validate(LicenseDataPage.java:55)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.PageFields.modified(PageFields.java:99)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.SelectableField.lambda$1(SelectableField.java:67)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:183)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4273)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1090)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1071)
    at org.eclipse.swt.widgets.Text.wmCommandChild(Text.java:3106)
    at org.eclipse.swt.widgets.Control.WM_COMMAND(Control.java:4895)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4747)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5039)
    at org.eclipse.swt.internal.win32.OS.CallWindowProc(Native Method)
    at org.eclipse.swt.widgets.Text.callWindowProc(Text.java:295)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4845)
    at org.eclipse.swt.widgets.Text.windowProc(Text.java:2687)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5039)
    at org.eclipse.swt.internal.win32.OS.SetWindowText(Native Method)
    at org.eclipse.swt.internal.win32.OS.SetWindowText(OS.java:2282)
    at org.eclipse.swt.widgets.Text.setText(Text.java:2348)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.SelectableField.reflectData(SelectableField.java:61)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LabeledField.lambda$1(LabeledField.java:66)
    at java.base/java.util.Optional.ifPresent(Optional.java:178)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LabeledField.installData(LabeledField.java:64)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LabeledField.installControll(LabeledField.java:48)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LicenseDataPage.lambda$0(LicenseDataPage.java:43)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at org.eclipse.passage.loc.dashboard.ui.wizards.license.LicenseDataPage.createControl(LicenseDataPage.java:43)
    at org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:180)
    at org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:744)
    at org.eclipse.jface.wizard.WizardDialog.createContents(WizardDialog.java:636)
    at org.eclipse.jface.window.Window.create(Window.java:431)
    at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1094)