-
Bug
-
Resolution: Incomplete
-
P4
-
None
-
15
-
x86_64
-
windows_10
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
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
- relates to
-
JDK-8243057 compilation of annotated static record fields fails with NPE
-
- Resolved
-