RFR: JDK-8240658: Code completion not working for lambdas in method invocations that require type inference

Jan Lahoda jan.lahoda at oracle.com
Mon Apr 6 11:10:54 UTC 2020


Hi,

Unfortunately turned out that there's a small bug in the patch - for 
expression lambdas, we don't need to (and should not) append a return 
statement (expression lambdas have an "implicit" return; and we cannot 
cast the expression to block).

Diff from the previous iteration:
http://cr.openjdk.java.net/~jlahoda/8240658/webrev.00-01/

Updated patch:
http://cr.openjdk.java.net/~jlahoda/8240658/webrev.01/

Any comments are welcome!

Thanks,
     Jan

On 18. 03. 20 20:26, Vicente Romero wrote:
> looks good,
> Vicente
> 
> On 3/13/20 8:20 AM, Jan Lahoda wrote:
>> Hi,
>>
>> When a method invocation requires type inference, and the user is in 
>> the process of typing of a (block) lambda that is a parameter to the 
>> method invocation, javac may not, in some cases, perform the type 
>> inference, which then may lead to non working code completion in 
>> JShell (and possibly other tools).
>>
>> For example (in JShell):
>> Arrays.stream(new Integer[]{1}).forEach(v -> { System.err.println(v.
>>
>> and press <tab> - this leads to no proposals currently, as the type of 
>> "v" is not inferred.
>>
>> The idea of the proposed patch is to improve the recovery in cases 
>> significant for cases where the text is being typed, and allow type 
>> inference in these cases. The type of "v" is then inferred, and the 
>> code completion works.
>>
>> Proposed patch:
>> http://cr.openjdk.java.net/~jlahoda/8240658/webrev.00/
>>
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8240658
>>
>> Thanks,
>>     Jan
> 


More information about the compiler-dev mailing list