generated lambda names - lambda$null$0
Rafkind, Jon
jon.rafkind at hp.com
Tue Oct 7 04:43:10 UTC 2014
On 10/06/2014 06:52 PM, Jonathan Gibbons wrote:
> On 10/06/2014 06:30 PM, Jonathan Gibbons wrote:
>> On 10/06/2014 06:19 PM, Rafkind, Jon wrote:
>>> BTW, javap cannot dissassemble/show any of the generated lambda code.
>> That sounds like a bug. Can you give a specific example?
>>
>> -- Jon
>>
> Partially answering my own question, for the example given in the
> original post, javap does show pretty much everything. The lambda method
> bodies are there: don't forget to use the -private option.
Aha, I didn't know about -private. Thanks!
> Source:
> $ more play/x.java
> public class x{
> interface T{
> int g();
> }
>
> public void test(){
> T t1 = () -> {
> T t2 = () -> 2;
> return 1;
> };
> }
> }
>
>
> javap:
> $ javap -v -private play/x.class
> Classfile /w/jjg/work/play/x.class
> Last modified Oct 6, 2014; size 886 bytes
> MD5 checksum 411cf2b7dea73faaee670b25e3739753
> Compiled from "x.java"
> public class x
> minor version: 0
> major version: 52
> flags: ACC_PUBLIC, ACC_SUPER
> Constant pool:
> #1 = Methodref #5.#19 // java/lang/Object."<init>":()V
> #2 = InvokeDynamic #0:#24 // #0:g:()Lx$T;
> #3 = InvokeDynamic #1:#24 // #1:g:()Lx$T;
> #4 = Class #26 // x
> #5 = Class #27 // java/lang/Object
> #6 = Class #28 // x$T
> #7 = Utf8 T
> #8 = Utf8 InnerClasses
> #9 = Utf8 <init>
> #10 = Utf8 ()V
> #11 = Utf8 Code
> #12 = Utf8 LineNumberTable
> #13 = Utf8 test
> #14 = Utf8 lambda$test$1
> #15 = Utf8 ()I
> #16 = Utf8 lambda$null$0
> #17 = Utf8 SourceFile
> #18 = Utf8 x.java
> #19 = NameAndType #9:#10 // "<init>":()V
> #20 = Utf8 BootstrapMethods
> #21 = MethodHandle #6:#29 // invokestatic
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> #22 = MethodType #15 // ()I
> #23 = MethodHandle #6:#30 // invokestatic
> x.lambda$test$1:()I
> #24 = NameAndType #31:#32 // g:()Lx$T;
> #25 = MethodHandle #6:#33 // invokestatic
> x.lambda$null$0:()I
> #26 = Utf8 x
> #27 = Utf8 java/lang/Object
> #28 = Utf8 x$T
> #29 = Methodref #34.#35 //
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> #30 = Methodref #4.#36 // x.lambda$test$1:()I
> #31 = Utf8 g
> #32 = Utf8 ()Lx$T;
> #33 = Methodref #4.#37 // x.lambda$null$0:()I
> #34 = Class #38 //
> java/lang/invoke/LambdaMetafactory
> #35 = NameAndType #39:#42 //
> metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> #36 = NameAndType #14:#15 // lambda$test$1:()I
> #37 = NameAndType #16:#15 // lambda$null$0:()I
> #38 = Utf8 java/lang/invoke/LambdaMetafactory
> #39 = Utf8 metafactory
> #40 = Class #44 //
> java/lang/invoke/MethodHandles$Lookup
> #41 = Utf8 Lookup
> #42 = Utf8
> (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> #43 = Class #45 // java/lang/invoke/MethodHandles
> #44 = Utf8 java/lang/invoke/MethodHandles$Lookup
> #45 = Utf8 java/lang/invoke/MethodHandles
> {
> public x();
> descriptor: ()V
> flags: ACC_PUBLIC
> Code:
> stack=1, locals=1, args_size=1
> 0: aload_0
> 1: invokespecial #1 // Method
> java/lang/Object."<init>":()V
> 4: return
> LineNumberTable:
> line 1: 0
> line 2: 4
>
> public void test();
> descriptor: ()V
> flags: ACC_PUBLIC
> Code:
> stack=1, locals=2, args_size=1
> 0: invokedynamic #2, 0 // InvokeDynamic #0:g:()Lx$T;
> 5: astore_1
> 6: return
> LineNumberTable:
> line 7: 0
> line 11: 6
>
> private static int lambda$test$1();
> descriptor: ()I
> flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
> Code:
> stack=1, locals=1, args_size=0
> 0: invokedynamic #3, 0 // InvokeDynamic #1:g:()Lx$T;
> 5: astore_0
> 6: iconst_1
> 7: ireturn
> LineNumberTable:
> line 8: 0
> line 9: 6
>
> private static int lambda$null$0();
> descriptor: ()I
> flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
> Code:
> stack=1, locals=0, args_size=0
> 0: iconst_2
> 1: ireturn
> LineNumberTable:
> line 8: 0
> }
> SourceFile: "x.java"
> InnerClasses:
> static #7= #6 of #4; // T=class x$T of class x
> public static final #41= #40 of #43; // Lookup=class
> java/lang/invoke/MethodHandles$Lookup of class
> java/lang/invoke/MethodHandles
> BootstrapMethods:
> 0: #21 invokestatic
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> Method arguments:
> #22 ()I
> #23 invokestatic x.lambda$test$1:()I
> #22 ()I
> 1: #21 invokestatic
> java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
> Method arguments:
> #22 ()I
> #25 invokestatic x.lambda$null$0:()I
> #22 ()I
>
>
>
More information about the lambda-dev
mailing list