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