eclipse-jdt / eclipse.jdt.ui

Eclipse Public License 2.0
32 stars 79 forks source link

NPE in OverriddenAssignmentFixCore #1454

Closed Bananeweizen closed 1 month ago

Bananeweizen commented 1 month ago

In 2024-06 the unused code cleanup has been enhanced to also do "join variable declaration": https://eclipse.dev/eclipse/news/4.32/jdt.php#combine-decl-and-assignment That new part of the cleanup causes NPEs on my projects (the cleanup itself has been enabled as cleanup action since years, so it definitely did not cause NPEs before). An example stack trace is:

java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.core.dom.Expression.getStartPosition()" because the return value of "org.eclipse.jdt.core.dom.VariableDeclarationFragment.getInitializer()" is null
    at org.eclipse.jdt.internal.corext.fix.OverriddenAssignmentFixCore$OverriddenAssignmentOperation.moveDown(OverriddenAssignmentFixCore.java:213)
    at org.eclipse.jdt.internal.corext.fix.OverriddenAssignmentFixCore$OverriddenAssignmentOperation.rewriteAST(OverriddenAssignmentFixCore.java:136)
    at org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFixCore.createChange(CompilationUnitRewriteOperationsFixCore.java:123)
    at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.calculateChange(CleanUpRefactoring.java:776)
    at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring$CleanUpASTRequestor.calculateSolutions(CleanUpRefactoring.java:302)
    at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring$CleanUpASTRequestor.acceptAST(CleanUpRefactoring.java:280)
    at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:1014)

I'm still trying to create a small reproducer.

jjohnstn commented 1 month ago

Hi @Bananeweizen I had to reproduce the problem manually as a number of code scenarios weren't generating the conditions necessary. I have created a fix that handles the situation of the initializer being null. If you find the scenario, please add it here and I will add it as a regression test.