RFR: 8292275: javac does not emit SYNTHETIC and MANDATED flags for parameters by default [v6]
Chen Liang
liach at openjdk.org
Wed Mar 22 03:26:53 UTC 2023
On Mon, 9 Jan 2023 07:34:41 GMT, Hannes Greule <duke at openjdk.org> 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.
>
> Hannes Greule has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 21 additional commits since the last revision:
>
> - Update copyright year
> - Merge remote-tracking branch 'upstream/master' into fix/enforce-methodparam_attr-if-mandated
> - address comments
> - cleanup
> - add annotation processing test
> - fix line breaks
> - add access flag based test
> - remove spaces from empty lines in text block
> - add bug number to test
> - copyright
> - ... and 11 more: https://git.openjdk.org/jdk/compare/813283e2...43780935
This appear related to https://bugs.openjdk.org/browse/JDK-8213329 as well, for this patch makes javac emit parameter attributes reliably.
test/langtools/tools/javac/RequiredParameterFlags/ImplicitParameters.java line 83:
> 81: MyRecord {}
> 82: }
> 83: }
We really need another local class example, such as
{
int apple = Integer.parseInt("apple");
Runnable run = new Runnable() {
public void run() {
System.out.println(apple);
}
}
}
-------------
PR Comment: https://git.openjdk.org/jdk/pull/9862#issuecomment-1478869826
PR Review Comment: https://git.openjdk.org/jdk/pull/9862#discussion_r1144191036
More information about the compiler-dev
mailing list