RFR: JDK-8025636 Hide lambda proxy frames in stacktraces

Rémi Forax forax at univ-mlv.fr
Tue Feb 3 09:37:28 UTC 2015


Looks good for me.

Rémi 

Le 3 février 2015 10:15:24 CET, Staffan Larsen <staffan.larsen at oracle.com> a écrit :
>Hi,
>
>Please review this patch for hiding the lambda proxy frame in stack
>traces:
>
>bug: https://bugs.openjdk.java.net/browse/JDK-8025636
><https://bugs.openjdk.java.net/browse/JDK-8025636>
>webrev: http://cr.openjdk.java.net/~sla/8025636/webrev.00/
><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