RFR: JDK-8025636 Hide lambda proxy frames in stacktraces

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Feb 18 00:17:34 UTC 2015

I think this work (which is good) underlines a general there for some 
kind of pluggable logic for converting a synthetic method name into 
something more useful for the reader and/or to manipulate stack trace 
elements (i.e. remove elements, fold 2-3 elements into a new one, etc.). 
Lambda methods are special, but so are bridge methods, accessors etc. I 
bet there is a meaningful representation for some (all?) of those which 
is different from the blob of bytes generated by javac. For instance, an 
accessor could name the owner and name of the accessed symbol, a bridge 
could name the bridged call, and so forth. The manipulation on the stack 
trace should probably be optional (i.e. there should be flag to control 
it, in case one would like to use the full stack info i.e. for debugging 
purposes). Long story short, I think there's a bigger theme in here. 
Some of the work done by Charles Nutter in the JRuby land seems also 


On 17/02/15 23:54, Remi Forax wrote:
> On 02/17/2015 07:54 AM, John Rose wrote:
>> On Feb 16, 2015, at 10:33 PM, Staffan Larsen 
>> <staffan.larsen at oracle.com> wrote:
>>> The first shot at fixing this bug was to filter out ACC_SYNTHETIC. 
>>> The drawback was that the actual lambda method are marked 
>>> ACC_SYNTHETIC, so that filtered too much.
>> OTOH it seems odd to filter out the actual interface method.
>> Ideally the back trace should show the name of the interface method 
>> and the implementation code of the lambda.
>> This information is divided between the two frames in question.
> The compiler can be changed to append the name of the interface method 
> when generating the static method corresponding to the lambda but 
> usually the name of the abstract method is not a useful information 
> because a functional interface is more a function type than a real 
> interface.
> Rémi

More information about the compiler-dev mailing list