RFR: JDK-8025636 Hide lambda proxy frames in stacktraces
Remi Forax
forax at univ-mlv.fr
Mon Feb 16 11:40:10 UTC 2015
Hi Staffan,
ASM MethodVisitor API requires to call visitAnnotation before calling
visitCode so
I think you shoud call visitAnnotation before calling new
ForwardingMethodGenerator(mv).generate().
cheers,
Rémi
On 02/16/2015 08:47 AM, Staffan Larsen wrote:
> Brian pointed out to me that this change missed to add the annotation
> to bridge methods. Here is an updated version that takes those into
> account. I also needed to update the test to verify that bridge
> methods were correctly annotated - it got a little bit more complex
> since I had to force bridges being used.
>
> new webrev: http://cr.openjdk.java.net/~sla/8025636/webrev.01/
> <http://cr.openjdk.java.net/%7Esla/8025636/webrev.01/>
>
> Thanks,
> /Staffan
>
>
>> On 3 feb 2015, at 10:15, Staffan Larsen <staffan.larsen at oracle.com
>> <mailto:staffan.larsen at oracle.com>> wrote:
>>
>> Hi,
>>
>> Please review this patch for hiding the lambda proxy frame in stack
>> traces:
>>
>> bug: https://bugs.openjdk.java.net/browse/JDK-8025636
>> webrev: http://cr.openjdk.java.net/~sla/8025636/webrev.00/
>> <http://cr.openjdk.java.net/%7Esla/8025636/webrev.00/>
>>
>> This is a straightforward addition of the LambdaForm$Hidden
>> annotation to the generated methods. What is surprising is that this
>> works even if LambdaForm$Hidden is a package-private class in
>> java.lang.invoke and thus not accessible from most of the generated
>> classes. There is some discussion of and answers to this in the bug,
>> but essentially this works because the annotation class is never
>> resolved and the code in Hotspot that looks for the annotation
>> amounts to nothing more than string comparisons.
>>
>> Hidden stack frames can be shown by running with
>> “-XX:+UnlockDiagnosticVMOptions -XX:+ShowHiddenFrames”.
>>
>> For an example of what this patch does, consider this code:
>>
>> Runnable r = () -> { throw new RuntimeException(); };
>> r.run();
>>
>> Previously, this would output:
>>
>> java.lang.RuntimeException
>> at pkg.Foo.lambda$main$0(Foo.java:5)
>> at pkg.Foo$$Lambda$1/2001112025.run(<Unknown>:1000000)
>> at pkg.Foo.main(Foo.java:15)
>>
>> With the patch it looks like this:
>>
>> java.lang.RuntimeException
>> at pkg.Foo.lambda$main$0(Foo.java:5)
>> at pkg.Foo.main(Foo.java:15)
>>
>>
>> Thanks,
>> /Staffan
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150216/36c648b8/attachment-0001.html>
More information about the compiler-dev
mailing list