RFR: JDK-8025636 Hide lambda proxy frames in stacktraces
Rémi Forax
forax at univ-mlv.fr
Mon Feb 16 19:28:24 UTC 2015
yes,
thumb up !
Rémi
Le 16 février 2015 18:50:25 CET, "Joel Borggrén-Franck" <joel.franck at oracle.com> a écrit :
>+1
>
>cheers
>/Joel
>
>> On 16 Feb 2015, at 15:25, Staffan Larsen <staffan.larsen at 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 <forax at 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.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/
>>>>>
>>>>> 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
>>>>>
>>>>
>>>
>>
--
Envoyé de mon téléphone Android avec K-9 Mail. Excusez la brièveté.
More information about the compiler-dev
mailing list