RFR JDK-8215470: Bad EnclosingMethod attribute on classes declared in lambdas

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Jan 16 21:05:55 UTC 2019


The patch looks good - but I have some questions; sometime ago some 
logic was added to LambdaToMethod to handle type variables - see 
LambdaSymbolKind.TypeVar and related code.

I have the vague feeling that this code was added precisely for this 
reason: to fixup issues related to missing type-variable in the 
enclosing method. If now you point to the correct method (as per source 
code), wouldn't this code be redundant? Doing some analysis on the code 
(hg annotate) I was able to get to this bug:

https://bugs.openjdk.java.net/browse/JDK-8005653

Looking at the synopsis, I see an inner class with an enclosing method - 
and a dandling type variable reference... I think this is overlapping 
with the issue you are trying to fix.

Also, I think it would be nice to have a test which uses reflection to 
poke at the type variables, and checks that the runtime values of the 
type-variables in the local class are indeed the same as the ones in the 
enclosing method.

Maurizio

On 16/01/2019 19:55, Vicente Romero wrote:
> Please review fix for [1] at [2]. The fix is about pointing the 
> enclosing method attribute of inner classes inside a lambda; to the 
> original method in which the inner class was declared. Currently javac 
> is pointing it to the synthetic method that contains the lambda 
> implementation. Please review the CSR too,
>
> Thanks,
> Vicente
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8215470
> [2] http://cr.openjdk.java.net/~vromero/8215470/webrev.00/
> [3] https://bugs.openjdk.java.net/browse/JDK-8217272


More information about the compiler-dev mailing list