RFR 8200199: javac suggests to use var even when var is used

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Mar 28 13:07:30 UTC 2018

I think the fact that the position is unset is deliberate - after all 
the var type is not really there - it just appears magically as a 
special side-effect of attributing a 'var' declaration (so that the rest 
of the pipeline can work as usual). In that sense, I believe that not 
having a position is correct: there's no source position that 
corresponds to the (synthetic) variable type inferred for a 'var' 
declaration. This is consistent with other places where we generate 
synthetic trees.


On 28/03/18 13:40, Vicente Romero wrote:
> question: shouldn't the fact that the vartype in the variable 
> declaration doesn't have the position of `var` be a bug?
> Vicente
> On 03/28/2018 06:52 AM, Maurizio Cimadamore wrote:
>> Hi,
>> there is an issue with the local variable inference finder: the 
>> finder reports possible cases where 'var' could be used even when the 
>> developer has already used 'var'. This is due to a timing issue with 
>> which the analyzer runs - by the time it runs, variable types have 
>> already been written into the AST by Attr - so the call to 
>> JCVarDecl.isImplicitlyTyped() is moot, as that call will simply look 
>> to see as to whether the tree type == null.
>> Since the var types corresponding to implicitly inferred types are 
>> synthetic and have no position set (see 
>> Attr::setSyntheticVariableType) I decided to use that property 
>> instead to decide as to whether the analyzer should, or should not 
>> consider a given variable declaration. This seems to be a good 
>> pragmatic solution. In the long run we should probably consolidate 
>> the treatment of implicitly inferred variables, and have some kind of 
>> common way to speak about them (e.g. both locals and implicit lambda 
>> parameters).
>> Webrev:
>> http://cr.openjdk.java.net/~mcimadamore/8200199/
>> Cheers
>> Maurizio

More information about the compiler-dev mailing list