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

Spurious override of Object.getClass leads to NPE

XMLWordPrintable

    • b129
    • generic
    • generic
    • Verified

      FULL PRODUCT VERSION :
      java version "1.8.0_72"
      Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
      Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Happens on both Linux and Mac:
      Mac: Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64 x86_64
      Linux: 3.13.0-92-generic #139-Ubuntu SMP Tue Jun 28 20:42:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


      A DESCRIPTION OF THE PROBLEM :
      Compile the above code and this error happens:
      An exception has occurred in the compiler (1.8.0_72). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.NullPointerException
      at com.sun.tools.javac.code.Types.capture(Types.java:4050)
      at com.sun.tools.javac.code.Types.capture(Types.java:4054)
      at com.sun.tools.javac.comp.Attr.capture(Attr.java:4445)
      at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1831)
      at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:615)
      at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1583)
      at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1296)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:651)
      at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1114)
      at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1003)
      at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4340)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4248)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4177)
      at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4152)
      at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1248)
      at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
      at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
      at com.sun.tools.javac.main.Main.compile(Main.java:523)
      at com.sun.tools.javac.main.Main.compile(Main.java:381)
      at com.sun.tools.javac.main.Main.compile(Main.java:370)
      at com.sun.tools.javac.main.Main.compile(Main.java:361)
      at com.sun.tools.javac.Main.compile(Main.java:56)
      at com.sun.tools.javac.Main.main(Main.java:42)

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1)save the code to file named T.java
      2) compile the code with:
      javac T.java

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      should complete with its own error message or compile successfully
      ACTUAL -
      get error message with NPE

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      An exception has occurred in the compiler (1.8.0_72). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.NullPointerException
      at com.sun.tools.javac.code.Types.capture(Types.java:4050)
      at com.sun.tools.javac.code.Types.capture(Types.java:4054)
      at com.sun.tools.javac.comp.Attr.capture(Attr.java:4445)
      at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1831)
      at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:615)
      at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1583)
      at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1296)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:651)
      at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1114)
      at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1003)
      at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
      at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
      at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
      at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4340)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4248)
      at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4177)
      at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4152)
      at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1248)
      at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
      at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
      at com.sun.tools.javac.main.Main.compile(Main.java:523)
      at com.sun.tools.javac.main.Main.compile(Main.java:381)
      at com.sun.tools.javac.main.Main.compile(Main.java:370)
      at com.sun.tools.javac.main.Main.compile(Main.java:361)
      at com.sun.tools.javac.Main.compile(Main.java:56)
      at com.sun.tools.javac.Main.main(Main.java:42)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      //Name this code T.java and compile with javac T.java
      import java.util.*;
      public class T {
          public static void main(String [] arg) {
              T t = new T();
              t.getClass();

          }
          public void getClass() {
              Fred1 f = new Fred1();
              System.out.println( "fred classname: " + f.getClassName());
          }


          abstract class Fred {
              public String getClassName() {
                  return this.getClass().getSimpleName();
              }
          }

          class Fred1 extends Fred {
          }
      }


      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      move inner classes to their own source file probably fixes it

            mcimadamore Maurizio Cimadamore
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: