Skip to content

Fix NullPointerException in JPA RelationshipMappingRename - #9803

Open
NicolaIsotta wants to merge 1 commit into
apache:masterfrom
NicolaIsotta:jpa-rename-npe
Open

NicolaIsotta wants to merge 1 commit into
apache:masterfrom
NicolaIsotta:jpa-rename-npe

Conversation

@NicolaIsotta

@NicolaIsotta NicolaIsotta commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Sometimes, while renaming java variables, an exception is thrown and a popup is shown. The exception is not harmful (renaming happens anyway), but it's quite annoying. This PR avoids the NPE with a null check (just as line 164).

Exception stack trace
SEVERE [org.openide.util.Exceptions]
java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.VariableElement.getEnclosingElement()" because "var" is null
	at org.netbeans.modules.j2ee.jpa.refactoring.rename.RelationshipMappingRename$1.run(RelationshipMappingRename.java:126)
	at org.netbeans.modules.j2ee.jpa.refactoring.rename.RelationshipMappingRename$1.run(RelationshipMappingRename.java:117)
	at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:500)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
	at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:341)
	at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
	at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
	at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
	at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:450)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:421)
	at org.netbeans.modules.j2ee.jpa.refactoring.rename.RelationshipMappingRename.prepare(RelationshipMappingRename.java:117)
[catch] at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare2(AbstractRefactoring.java:417)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare(AbstractRefactoring.java:401)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.prepare(AbstractRefactoring.java:212)
	at org.netbeans.modules.refactoring.spi.impl.ParametersPanel$Prepare.run(ParametersPanel.java:1063)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1370)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1981)

note 1: added Java label, as the j2ee.jpa.refactoring module is in the java cluster, but it seems the module is not tested anywhere

note 2: from a quick eyeballing, the class does actually nothing at all: the Set<ElementHandle<TypeElement>> set is always empty. Plus, it only handles the old javax package. I don't use JPA so I don't intend to work on it, but it was worth noticing


Click to collapse/expand PR instructions

By opening a pull request you confirm that, unless explicitly stated otherwise, the changes -

  • are all your own work, and you have the right to contribute them.
  • are contributed solely under the terms and conditions of the Apache License 2.0 (see section 5 of the license for more information).

LLMs, Commit messages and PR description:

  • Please make sure (eg. git log) that all commits have a valid name and email address for you in the Author field.
  • LLM assisted commits should be attributed with an Assisted-by: MODEL_NAME MODEL_VERSION line appended to the commit message.
    • Please mention coding assistance in the PR description too (eg. by adding the same Assisted-by line from above)
    • Please describe the changes in your own words - we'd like to know you understand the changes being made!

If you're a first time contributor, see the Contributing guidelines for more information.

If you're a committer, please label the PR before pressing "Create pull request" so that the right test jobs can run.

PR approval and merge checklist:

  1. Was this PR correctly labeled, did the right tests run? When did they run?
  2. Is this PR squashed?
  3. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  4. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

If this PR targets the delivery branch: don't merge. (full wiki article)

The plugin runs on every Java member rename. When the renamed variable's
handle can't be resolved, resolveElement() returns null; guard against it
as the second resolution block already does.
@NicolaIsotta NicolaIsotta self-assigned this Nov 13, 2026
@NicolaIsotta NicolaIsotta added the Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form) label Nov 13, 2026
@NicolaIsotta NicolaIsotta added this to the NB33 milestone Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants