generated lambda names - lambda$null$0
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Oct 7 01:51:40 UTC 2014
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.
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