+1

cheers
/Joel

> On 16 Feb 2015, at 15:25, Staffan Larsen <staffan.lar...@oracle.com> wrote:
> 
> Good point!
> 
> new webrev: http://cr.openjdk.java.net/~sla/8025636/webrev.02/
> 
> Thanks,
> /Staffan
> 
>> On 16 feb 2015, at 12:40, Remi Forax <fo...@univ-mlv.fr> wrote:
>> 
>> 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/
>>> 
>>> Thanks,
>>> /Staffan
>>> 
>>> 
>>>> On 3 feb 2015, at 10:15, Staffan Larsen <staffan.lar...@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/
>>>> 
>>>> 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
>>>> 
>>> 
>> 
> 

Reply via email to