Good point! new webrev: http://cr.openjdk.java.net/~sla/8025636/webrev.02/ <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/ >> <http://cr.openjdk.java.net/%7Esla/8025636/webrev.01/> >> >> Thanks, >> /Staffan >> >> >>> On 3 feb 2015, at 10:15, Staffan Larsen <staffan.lar...@oracle.com >>> <mailto: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 >>> <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 >>> >> >