RFR: JDK-8211148: javac -source 10 in JDK11 is inconsistent with javac in JDK10
Vicente Romero
vicente.romero at oracle.com
Thu Oct 4 12:40:14 UTC 2018
On 10/04/2018 06:53 AM, Maurizio Cimadamore wrote:
> 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?
I see, I was just fixing a typo: EXPLIICT for EXPLICIT
>
> Maurizio
Vicente
>
> 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