RFR: 8240658: Code completion not working for lambdas in method invocations that require type inference [v3]

Maurizio Cimadamore mcimadamore at openjdk.java.net
Mon Sep 14 20:33:45 UTC 2020


On Fri, 11 Sep 2020 13:51:21 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> 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.
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Moving the TestGetTypeMirrorReference test into a separate folder.

Late to the party; I like the fact that the recovery logic now seats neatly in its own class. In fact, I think we
should probably push this even further, and explore the possibility of decoupling regular attribution from recovery
attribution completely - e.g. have recovery attribution run in its separate compiler pass. Probably a bit tricky to
pull off in full, but I think it will significantly simplify the maintenance of the attr code going forward.

-------------

PR: https://git.openjdk.java.net/jdk/pull/50


More information about the compiler-dev mailing list