JDK-8354688 : NPE in null-free code
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 24
  • Priority: P3
  • Status: New
  • Resolution: Unresolved
  • OS: generic
  • CPU: generic
  • Submitted: 2025-04-13
  • Updated: 2025-04-15
Description
A DESCRIPTION OF THE PROBLEM :
Running one particular test suite of Eclipse (component JDT/UI) may throw lots of NullPointerExceptions in code that provably provides a valid, non-null value. While originally detected in JDK 23, the bug still exists in JDK 24.

The same has already been submitted as https://bugs.openjdk.org/browse/JDK-8349660, which, however, stalled due to lack of information.

Since recent development in Eclipse influenced the occurrence of the bug I prepared a stable git branch that reproduces the problem, see Steps to Reproduce.

The following github issues discuss the problem:
* https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/1639
* https://github.com/eclipse-jdt/eclipse.jdt.core/issues/3385
* https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/2142

The method where NPE occurs is https://github.com/eclipse-jdt/eclipse.jdt.core/blob/ee35373d90b32a90abcd9c2427b2319b22279407/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java#L272

During initial analysis I found that the method must be compiled twice for the bug to occur, but I lost any detailed logs from this analysis.


REGRESSION : Last worked in version 21.0.6



This avoids the bug:
* -XX:CompileCommand=exclude,org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer::getExtendedRange

Also passing this helped:
* -XX:+UnlockDiagnosticVMOptions  -XX:-ReduceAllocationMerges
ACTUAL -
Many Errors are reported and several result files in org.eclipse.jdt.ui.tests/target/surefire-reports/ will show exceptions like this:

    <error message="Cannot invoke &quot;org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer$SourceRange.getStartPosition()&quot; because &quot;range&quot; is null" type="java.lang.NullPointerException"><![CDATA[java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer$SourceRange.getStartPosition()" because "range" is null
        at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer.getExtendedEnd(ASTRewriteAnalyzer.java:264)
...




Comments
Follow-up bug to JDK-8349660. There was a possibly related fix ported to 24.0.2 (JDK-8347718). Which version of 24 did they try?
14-04-2025