On Fri, 12 Aug 2022 22:36:37 GMT, Joe Darcy <[email protected]> wrote:

>> With this change, javac emits the MethodParameters attribute in cases where 
>> the JLS requires the information about synthetic and mandated parameters to 
>> be stored (see issue).
>> Parameter names are *not* emitted unless the `-parameter` flag is set.
>> 
>> The relevant changes are in `ClassWriter`, where we go through the params to 
>> see if we need the attribute if the `-parameter` flag is not set (if it is 
>> set, both names and flags will be emitted).
>> For records, the mandated flag wasn't set at all, this is solved by the one 
>> line fix in `JavacParser`.
>> 
>> The changes to `CreateSymbols` and `ClassReader` are needed as they weren't 
>> able to deal with missing names in the attribute.
>> I also had to update some tests as they got a new constant pool entry.
>> 
>> Only the mandated flag is covered by tests at the moment, as the occurrences 
>> are well-specified in the JLS.
>> Please let me know if you want tests for specific appearances of synthetic 
>> parameters.
>
> src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java 
> line 4023:
> 
>> 4021:                         tmpParams.add(F.at(param)
>> 4022:                                 // we will get flags plus annotations 
>> from the record component
>> 4023:                                 .VarDef(F.Modifiers(Flags.PARAMETER | 
>> Flags.GENERATED_MEMBER | Flags.MANDATED | param.mods.flags & Flags.VARARGS,
> 
> Should the use of MANDATED be conditional on the target class file version?

I advise also writing a core reflection test that uses access flags 
(java.lang.reflect.AccessFlag).

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

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

Reply via email to