RFR: 8334870: javac does not accept classfiles with certain permitted RuntimeVisibleParameterAnnotations and RuntimeInvisibleParameterAnnotations attributes.

Jan Lahoda jlahoda at openjdk.org
Mon Jun 24 15:12:21 UTC 2024


JVMS 4.7.18 and 4.7.19 say this about the entries in the RuntimeVisibleParameterAnnotations and RuntimeInvisibleParameterAnnotations attributes:

> The i'th entry in the parameter_annotations table may, but is not required to, correspond to the i'th parameter descriptor in the method descriptor (ยง4.3.3).

When reading classfiles, javac does not follow this specification (which puts no requirements on the number of entries in the attributes), but rather expects as many entries as the `MethodSymbol.type` has (which is either based in the `Signature` attribute, if present, or the method descritor, if `Signature` is not present).

This patch proposes to adjust javac to accept the attributes with any number of entries, implementing a number of heuristics to map the content of the entries in the attributes to the parameters. There are comments in the code explaining the heuristics.

javac will ignore the RuntimeVisibleParameterAnnotations and RuntimeInvisibleParameterAnnotations attributes it cannot handle with a warning.

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

Commit messages:
 - Adding a new bug number.
 - Adjusting heuristics.
 - Fixing tests.
 - Fixing tests.
 - 8024694: javac always expects signature attribute for enum constructors

Changes: https://git.openjdk.org/jdk/pull/19860/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19860&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8334870
  Stats: 1087 lines in 6 files changed: 698 ins; 382 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/19860.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19860/head:pull/19860

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


More information about the compiler-dev mailing list