Skip to content

Fix #671: restrict Cucumber property pages to IResource selections - #699

Open
alef75 wants to merge 1 commit into
cucumber:mainfrom
alef75:fix-671-property-page-npe
Open

Fix #671: restrict Cucumber property pages to IResource selections#699
alef75 wants to merge 1 commit into
cucumber:mainfrom
alef75:fix-671-property-page-npe

Conversation

@alef75

@alef75 alef75 commented Aug 6, 2026

Copy link
Copy Markdown

The Cucumber and Java Backend property pages were contributed to org.eclipse.ui.propertyPages with no objectClass/adaptable/enabledWhen filter, so they were offered for any selection. When rendered against a non-IResource element (e.g. a Remote System Explorer connection), getNode() dereferenced a null resource and threw a NullPointerException, breaking the whole Properties dialog.

  • Add to both property page contributions, so they are only offered for IResource-adaptable selections.
  • Make CucumberEditorProperties#getNode and CucumberJavaBackendProperties#getNode null-safe against both a null resource AND a resource with no project (the workspace root passes the IResource filter but IWorkspaceRoot#getProject() returns null, which ProjectScope otherwise rejects with an IllegalArgumentException), and guard every call site (createContents/performOk/performDefaults) that dereferences the result. getElement().getAdapter(IResource.class) can still return null for an element the adapter manager otherwise treats as adaptable, so the enablement filter alone does not fully close the NPE; the affected pages now show a not-applicable message instead of crashing.
  • Align performOk()'s guard in both property pages to the control field already used by performDefaults()/createContents(), rather than recomputing getNode(), so the two stay consistent.

…tions

The Cucumber and Java Backend property pages were contributed to
org.eclipse.ui.propertyPages with no objectClass/adaptable/enabledWhen
filter, so they were offered for any selection. When rendered against
a non-IResource element (e.g. a Remote System Explorer connection),
getNode() dereferenced a null resource and threw a
NullPointerException, breaking the whole Properties dialog.

- Add <enabledWhen><adapt type=IResource/></enabledWhen> to both
  property page contributions, so they are only offered for
  IResource-adaptable selections.
- Make CucumberEditorProperties#getNode and
  CucumberJavaBackendProperties#getNode null-safe against both a null
  resource AND a resource with no project (the workspace root passes
  the IResource filter but IWorkspaceRoot#getProject() returns null,
  which ProjectScope otherwise rejects with an
  IllegalArgumentException), and guard every call site
  (createContents/performOk/performDefaults) that dereferences the
  result. getElement().getAdapter(IResource.class) can still return
  null for an element the adapter manager otherwise treats as
  adaptable, so the enablement filter alone does not fully close the
  NPE; the affected pages now show a not-applicable message instead
  of crashing.
- Align performOk()'s guard in both property pages to the control
  field already used by performDefaults()/createContents(), rather
  than recomputing getNode(), so the two stay consistent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants