Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8195829

Parsing a nameless ES6 class results in a thrown NullPointerException.

XMLWordPrintable

    • b01
    • generic
    • generic

      FULL PRODUCT VERSION :
      java version "10-ea" 2018-03-20
      Java(TM) SE Runtime Environment 18.3 (build 10-ea+39)
      Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10-ea+39, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.3.9600]

      A DESCRIPTION OF THE PROBLEM :
      According to ecma-262 the Class Definition for a ClassExpression specifially states that the BindingIdentifier is optional. An example for valid ES6 code:

      (class {});

      It seems the sequence that occurs once the nashorn Parser has started parsing results in a jdk.nashorn.internal.ir.ClassNode that has a null value for it's private variable IdentNode ident.

      However, the code in jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl in the constructor assumes a non-null jdk.nashorn.internal.ir.IdentNode is always supplied as an argument. Consequently and incorrectly a NullPointerException is thrown.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile and execute the provided sourcecode.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      No output.
      ACTUAL -
      A thrown NullPointerException.


      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.NullPointerException
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IdentifierTreeImpl.<init>(IdentifierTreeImpl.java:37)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateIdent(IRTranslator.java:601)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterClassNode(IRTranslator.java:478)
      at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ClassNode.accept(ClassNode.java:131)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateExpr(IRTranslator.java:584)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.enterExpressionStatement(IRTranslator.java:200)
      at jdk.scripting.nashorn/jdk.nashorn.internal.ir.ExpressionStatement.accept(ExpressionStatement.java:81)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translateStats(IRTranslator.java:539)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.IRTranslator.translate(IRTranslator.java:99)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.translate(ParserImpl.java:224)
      at jdk.scripting.nashorn/jdk.nashorn.api.tree.ParserImpl.parse(ParserImpl.java:126)
      at Main.main(Main.java:9)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import jdk.nashorn.api.tree.CompilationUnitTree;
      import jdk.nashorn.api.tree.Parser;

      public class Main {

          public static void main(String[] args) {

              Parser p = jdk.nashorn.api.tree.Parser.create("--language=es6");
              CompilationUnitTree tree = p.parse("test.js", "(class {});", System.out::println);

          }

      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      No workaround found.

            sundar Sundararajan Athijegannathan
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: