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

javac cannot handle annotations on (private|final) static fields within records

    XMLWordPrintable

Details

    • x86_64
    • windows_10

    Description

      A DESCRIPTION OF THE PROBLEM :
      This condition causes the NPE

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile sample file
      javac --enable-preview -source 15 TestRecordBug.java

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      nothing
      ACTUAL -
      java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.code.Symbol$RecordComponent.getMetadata()" because "rc" is null
              at jdk.compiler/com.sun.tools.javac.comp.Check.validateAnnotation(Check.java:2940)
              at jdk.compiler/com.sun.tools.javac.comp.Check.validateAnnotations(Check.java:2896)
              at jdk.compiler/com.sun.tools.javac.comp.Annotate.lambda$annotateLater$1(Annotate.java:279)
              at jdk.compiler/com.sun.tools.javac.comp.Annotate.flush(Annotate.java:200)
              at jdk.compiler/com.sun.tools.javac.comp.Annotate.unblockAnnotations(Annotate.java:144)
              at jdk.compiler/com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:157)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterDone(JavaCompiler.java:1750)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1071)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:936)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
              at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:59)
              at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:45)

      ---------- BEGIN SOURCE ----------
      @interface I { }

      record R() {

      @I
      private static Object o;

      }

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

      CUSTOMER SUBMITTED WORKAROUND :
      boolean isRecordField = isRecordMember &&
                      (s.flags_field & (Flags.PRIVATE | Flags.FINAL | Flags.GENERATED_MEMBER | Flags.RECORD)) != 0 &&
                      declarationTree.hasTag(VARDEF) &&
                      s.owner.kind == TYP;
      =>
      boolean isRecordField = isRecordMember &&
                      (s.flags_field & Flags.STATIC) == 0 &&
                      (s.flags_field & (Flags.PRIVATE | Flags.FINAL | Flags.GENERATED_MEMBER | Flags.RECORD)) != 0 &&
                      declarationTree.hasTag(VARDEF) &&
                      s.owner.kind == TYP;

      FREQUENCY : always


      Attachments

        Issue Links

          Activity

            People

              adev ANUPAM DEV
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: