JDK-8242214 : NullPointerException in JDK 14 javac compiling a method reference
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 14,15
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2020-04-02
  • Updated: 2024-10-17
  • Resolved: 2020-06-19
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 15 JDK 16
15 b29Fixed 16Fixed
Related Reports
Relates :  
Description
ADDITIONAL SYSTEM INFORMATION :
macOS

A DESCRIPTION OF THE PROBLEM :
The Elasticsearch server codebase is failing to compile, the compiler is failing with

java.lang.NullPointerException
        at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.isSubClass(Symbol.java:1365)

in the compiler on a source file that compiles fine in JDK 13.0.2. The source file that is failing is server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java. The failure is happening on line 126. Switching to a lambda expression works around the issue.


REGRESSION : Last worked in version 13.0.2

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
git clone https://github.com/elastic/elasticsearch.git && cd elasticsearch && git checkout db572afda8cbead464e1bb1f08a028d4201e464d && JAVA_HOME=<path to JDK 14> ./gradlew :server:compileJava

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compilation should succeed
ACTUAL -
Build fails with

java.lang.NullPointerException
        at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.isSubClass(Symbol.java:1365)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.accessClass(Lower.java:1089)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.accessSymbol(Lower.java:960)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.access(Lower.java:1205)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitSelect(Lower.java:3928)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2276)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitApply(Lower.java:3016)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1736)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:256)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1523)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:167)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3539)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1038)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2721)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2633)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:884)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2223)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:786)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2223)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:786)
        at jdk.compiler/com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2081)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translate(Lower.java:2100)
        at jdk.compiler/com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:4005)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1590)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1437)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:972)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)

---------- BEGIN SOURCE ----------
server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java@ db572afda8cbead464e1bb1f08a028d4201e464d, line 126
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
The following diff *works around* the issue:

diff --git a/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java b/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java
index fe7c03b11b1..ae23313ebd1 100644
--- a/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java
+++ b/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java
@@ -123,7 +123,7 @@ public class PhraseSuggestion extends Suggest.Suggestion<PhraseSuggestion.Entry>
         private static final ObjectParser<Entry, Void> PARSER = new ObjectParser<>("PhraseSuggestionEntryParser", true, Entry::new);
         static {
             declareCommonFields(PARSER);
-            PARSER.declareObjectArray(Entry::addOptions, (p, c) -> Option.fromXContent(p), new ParseField(OPTIONS));
+            PARSER.declareObjectArray((entry, options) -> entry.addOptions(options), (p, c) -> Option.fromXContent(p), new ParseField(OPTIONS));
         }
 
         public static Entry fromXContent(XContentParser parser) {


FREQUENCY : always



Comments
Requested the submitter verify the fix with latest version of JDK 15 and 16.
13-11-2020

Changeset: 226e8528 Author: Jan Lahoda <jlahoda@openjdk.org> Date: 2020-06-19 14:26:09 +0000 URL: https://git.openjdk.java.net/lanai/commit/226e8528
02-07-2020

Changeset: 226e8528 Author: Jan Lahoda <jlahoda@openjdk.org> Date: 2020-06-19 14:26:09 +0000 URL: https://git.openjdk.java.net/panama-foreign/commit/226e8528
02-07-2020

Changeset: 226e8528 Author: Jan Lahoda <jlahoda@openjdk.org> Date: 2020-06-19 14:26:09 +0000 URL: https://git.openjdk.java.net/amber/commit/226e8528
02-07-2020

Changeset: 226e8528 Author: Jan Lahoda <jlahoda@openjdk.org> Date: 2020-06-19 14:26:09 +0000 URL: https://git.openjdk.java.net/mobile/commit/226e8528
02-07-2020

URL: https://hg.openjdk.java.net/jdk/jdk15/rev/7ea2b63984c0 User: jlahoda Date: 2020-06-19 12:27:40 +0000
19-06-2020

regression provoked by: JDK-8234729
18-06-2020

Review thread: https://mail.openjdk.java.net/pipermail/compiler-dev/2020-June/014662.html
18-06-2020

The observations on Windows 10: JDK 14: Fail JDK 13: Pass ILW=HLM=P3
06-04-2020