RFR: JDK-8211148: javac -source 10 in JDK11 is inconsistent with javac in JDK10
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Oct 4 10:53:31 UTC 2018
Thanks, looks good. As for the test comment, I was referring to this
hunk of the patch:
- EXPLIICT_SIMPLE("A", ExplicitKind.EXPLICIT),
- EXPLIICT_SIMPLE_ARR1("A[]", ExplicitKind.EXPLICIT),
- EXPLIICT_SIMPLE_ARR2("A[][]", ExplicitKind.EXPLICIT),
+ EXPLICIT_SIMPLE("A", ExplicitKind.EXPLICIT),
+ EXPLICIT_SIMPLE_ARR1("A[]", ExplicitKind.EXPLICIT),
+ EXPLICIT_SIMPLE_ARR2("A[][]", ExplicitKind.EXPLICIT),
Looks like the contents are the same, what's up?
Maurizio
On 03/10/18 17:39, Vicente Romero wrote:
> Hi Maurizio,
>
> Thanks for the review. I have updated the webrev [1]
>
> [1] http://cr.openjdk.java.net/~vromero/8211148/webrev.01/jdk.dev.patch
>
> some comments below.
>
> On 10/03/2018 06:18 AM, Maurizio Cimadamore wrote:
>> The changes look generally good, but I have some questions/comments.
>>
>> * (cosmetic, optional) This change:
>>
>> if (Feature.VAR_SYNTAX_IMPLICIT_LAMBDAS.allowedInSource(source)) {
>> + log.error(DiagnosticFlag.SYNTAX, param.pos,
>> Errors.VarNotAllowedArray);
>> + } else {
>> + log.error(DiagnosticFlag.SYNTAX, param.pos,
>> Errors.VarNotAllowedHere);
>> + }
>>
>> Could be slightly simplified as:
>>
>> log.error(DiagnosticFlag.SYNTAX, param.pos,
>> Feature.VAR_SYNTAX_IMPLICIT_LAMBDAS.allowedInSource(source)
>> ? Errors.VarNotAllowedArray : Errors.VarNotAllowedHere);
>
> done it
>>
>>
>> * A more serious issue is, I think that the code here:
>>
>> if (Feature.VAR_SYNTAX_IMPLICIT_LAMBDAS.allowedInSource(source)) {
>> + param.startPos =
>> TreeInfo.getStartPos(param.vartype);
>> + param.vartype = null;
>> + } else {
>> + log.error(DiagnosticFlag.SYNTAX, param.pos,
>> Errors.VarNotAllowedHere);
>> + }
>>
>> Should really call the parser method 'checkSourceLevel' which will
>> issue the correct error if the feature is not allowed (e.g. 'var in
>> lambda not allowed, use source 11 to enable'). Which brings to:
>>
>> * You should define a compiler key for the new feature (e.g. 'var in
>> lambda') so that the framework will pick that up when generating a
>> diagnostic using the above method
>
> done too,
>
>>
>> * In the classification logic, I believe the goal of the changes is
>> to disable the diagnostic generation for illegal combinations of
>> lambda parameter declarations when one or more of these involve a
>> 'var' which would have already been flagged in a separate diagnostic.
>> That is, these changes are to avoid to report duplicate and spurious
>> diagnostics, right?
>
> yep, I reorganized the matrix putting the var rows and columns to the
> top and to the left, there wasn't a real reason to to this, but I
> thought that it could help reading the code in the future. Probably
> very subjective but still :) then yes if the source doesn't allow var
> in implicit lambdas a `mask` is applied to the value read from the
> matrix effectively changing it to a null to avoid duplicate reports.
>>
>> * In the LambdaParserTest I see no relevant changes, but still the
>> patch shows something - is there some trailing space or indent
>> different at play?
>
> the change here was to add a case for which errors are expected when
> var is used and source is 10
>>
>> Maurizio
>
> Vicente
>
>>
>> On 03/10/18 01:40, Vicente Romero wrote:
>>> Hi,
>>>
>>> Please review the fix for [1] at [2]. There were a number of places
>>> where the compiler was not checking if var syntax for implicit
>>> lambdas was allowed or not. This implied that the JDK11 compiler was
>>> accepting code with this feature even if the -source 10 option was
>>> passed, this shouldn't happen. This patch fixes this and issues the:
>>> "var not allowed here" error message as expected.
>>>
>>> Thanks,
>>> Vicente
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8211148
>>> [2] http://cr.openjdk.java.net/~vromero/8211148/webrev.00/jdk.dev.patch
>>
>
More information about the compiler-dev
mailing list