RFR: 8369489: Marker annotation on inner class access crashes javac compiler

Jan Lahoda jlahoda at openjdk.org
Fri Oct 17 11:56:50 UTC 2025


Consider code like:

I i = @Ann Object[]::new;


the initializer is a method reference over an array type, whose component is annotated - that follows from the grammar in JLS 4.3, and also matches what is parsed for code like:

I i = (@Ann Object[]) null;


But, the javac's parser will create a method reference, whose type is an annotated type - which is wrong. And also fails if the array type as such is also annotated.

The proposal herein is to simply use `insertAnnotationsToMostInner` to put the annotation at the correct place, as is done on other similar places. This one attaches the annotation at the correct nesting level.

Sadly, the code may be something very broken like:

I i = @Ann foobar()::new;


and `insertAnnotationsToMostInner` would fail for this code/AST. Hence if the method reference is not over a type, we'll create an `AnnotatedType` (to keep the info in the AST as before) + an error + an error AST node.

-------------

Commit messages:
 - Fixing error recovery.
 - Adjusting member ref position to sensible values.
 - 8369489: Marker annotation on inner class access crashes javac compiler

Changes: https://git.openjdk.org/jdk/pull/27864/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27864&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8369489
  Stats: 249 lines in 4 files changed: 240 ins; 5 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/27864.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27864/head:pull/27864

PR: https://git.openjdk.org/jdk/pull/27864


More information about the compiler-dev mailing list