1 2method Main.getHandleForStatic(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 3{ 4 0| invoke-static {}, java.lang.invoke.MethodHandles.publicLookup():java.lang.invoke.MethodHandles$Lookup 5 3| move-result-object v0 6 4| invoke-virtual {v0,v2,v3,v4}, java.lang.invoke.MethodHandles$Lookup.findStatic(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 7 7| move-result-object v1 8 8| return-object v1 9} 10 11method Main.getHandleForVirtual(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 12{ 13 0| invoke-static {}, java.lang.invoke.MethodHandles.publicLookup():java.lang.invoke.MethodHandles$Lookup 14 3| move-result-object v0 15 4| invoke-virtual {v0,v2,v3,v4}, java.lang.invoke.MethodHandles$Lookup.findVirtual(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 16 7| move-result-object v1 17 8| return-object v1 18} 19 20method Main.getLongCompareToHandle():java.lang.invoke.MethodHandle 21{ 22 0| new-instance v0, java.lang.Long 23 2| const-wide v1:v2, #+0 (0x0000000000000000 | 0.00000) 24 7| invoke-direct {v0,v1,v2}, java.lang.Long.<init>(long):void 25 10| invoke-virtual {v0}, java.lang.Object.getClass():java.lang.Class 26 13| move-result-object v0 27 14| sget-object v1, java.lang.Integer.TYPE 28 16| invoke-static {v1,v0}, java.lang.invoke.MethodType.methodType(java.lang.Class, java.lang.Class):java.lang.invoke.MethodType 29 19| move-result-object v2 30 20| const-string v3, "compareTo" 31 22| invoke-static {v0,v3,v2}, Main.getHandleForVirtual(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 32 25| move-result-object v0 33 26| return-object v0 34} 35 36method Main.getStringConcatHandle():java.lang.invoke.MethodHandle 37{ 38 0| const-string v0, "concat" 39 2| invoke-virtual {v0}, java.lang.Object.getClass():java.lang.Class 40 5| move-result-object v1 41 6| invoke-static {v1,v1}, java.lang.invoke.MethodType.methodType(java.lang.Class, java.lang.Class):java.lang.invoke.MethodType 42 9| move-result-object v2 43 10| invoke-static {v1,v0,v2}, Main.getHandleForVirtual(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 44 13| move-result-object v0 45 14| return-object v0 46} 47 48method Main.getStringValueOfLongHandle():java.lang.invoke.MethodHandle 49{ 50 0| sget-object v0, java.lang.Long.TYPE 51 2| const-string v1, "valueOf" 52 4| invoke-virtual {v1}, java.lang.Object.getClass():java.lang.Class 53 7| move-result-object v2 54 8| invoke-static {v2,v0}, java.lang.invoke.MethodType.methodType(java.lang.Class, java.lang.Class):java.lang.invoke.MethodType 55 11| move-result-object v3 56 12| invoke-static {v2,v1,v3}, Main.getHandleForStatic(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 57 15| move-result-object v0 58 16| return-object v0 59} 60 61method Main.getStringValueOfObjectHandle():java.lang.invoke.MethodHandle 62{ 63 0| new-instance v0, java.lang.Object 64 2| invoke-direct {v0}, java.lang.Object.<init>():void 65 5| invoke-virtual {v0}, java.lang.Object.getClass():java.lang.Class 66 8| move-result-object v0 67 9| const-string v1, "valueOf" 68 11| invoke-virtual {v1}, java.lang.Object.getClass():java.lang.Class 69 14| move-result-object v2 70 15| invoke-static {v2,v0}, java.lang.invoke.MethodType.methodType(java.lang.Class, java.lang.Class):java.lang.invoke.MethodType 71 18| move-result-object v3 72 19| invoke-static {v2,v1,v3}, Main.getHandleForStatic(java.lang.Class, java.lang.String, java.lang.invoke.MethodType):java.lang.invoke.MethodHandle 73 22| move-result-object v0 74 23| return-object v0 75} 76 77method Main.main(java.lang.String[]):void 78{ 79 0| invoke-static {}, Main.getStringConcatHandle():java.lang.invoke.MethodHandle 80 3| move-result-object v0 81 4| const-string v1, "[String1]" 82 6| const-string v2, "+[String2]" 83 8| invoke-polymorphic {v0,v1,v2}, java.lang.invoke.MethodHandle.invokeExact(java.lang.Object[]):java.lang.Object, (java.lang.String, java.lang.String):java.lang.String 84 12| move-result-object v3 85 13| sget-object v4, java.lang.System.out 86 15| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 87 18| invoke-static {}, Main.getStringValueOfObjectHandle():java.lang.invoke.MethodHandle 88 21| move-result-object v0 89 22| const-string v1, "[String1]" 90 24| invoke-polymorphic {v0,v1}, java.lang.invoke.MethodHandle.invokeExact(java.lang.Object[]):java.lang.Object, (java.lang.Object):java.lang.String 91 28| move-result-object v3 92 29| sget-object v4, java.lang.System.out 93 31| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 94 34| invoke-static {}, Main.getStringConcatHandle():java.lang.invoke.MethodHandle 95 37| move-result-object v0 96 38| const-string v1, "[String1]" 97 40| const-string v2, "+[String2]" 98 42| invoke-polymorphic {v0,v1,v2}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Object, java.lang.Object):java.lang.String 99 46| move-result-object v3 100 47| sget-object v4, java.lang.System.out 101 49| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 102 52| invoke-static {}, Main.getStringValueOfLongHandle():java.lang.invoke.MethodHandle 103 55| move-result-object v0 104 56| const-wide v1:v2, #+42 (0x000000000000002a | 2.07508e-322) 105 61| invoke-polymorphic {v0,v1,v2}, java.lang.invoke.MethodHandle.invokeExact(java.lang.Object[]):java.lang.Object, (long):java.lang.String 106 65| move-result-object v3 107 66| sget-object v4, java.lang.System.out 108 68| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 109 71| const v1, #+40 (0x00000028 | 5.60519e-44) 110 74| invoke-polymorphic {v0,v1}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (int):java.lang.String 111 78| move-result-object v3 112 79| sget-object v4, java.lang.System.out 113 81| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 114 84| new-instance v1, java.lang.Long 115 86| const-wide v2:v3, #+43 (0x000000000000002b | 2.12448e-322) 116 91| invoke-direct {v1,v2,v3}, java.lang.Long.<init>(long):void 117 94| invoke-polymorphic {v0,v1}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Long):java.lang.String 118 98| move-result-object v3 119 99| sget-object v4, java.lang.System.out 120 101| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 121 104| new-instance v1, java.lang.Integer 122 106| const v2, #+44 (0x0000002c | 6.16571e-44) 123 109| invoke-direct {v1,v2}, java.lang.Integer.<init>(int):void 124 112| invoke-polymorphic {v0,v1}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Integer):java.lang.String 125 116| move-result-object v3 126 117| sget-object v4, java.lang.System.out 127 119| invoke-virtual {v4,v3}, java.io.PrintStream.println(java.lang.String):void 128 122| invoke-static {}, Main.getLongCompareToHandle():java.lang.invoke.MethodHandle 129 125| move-result-object v0 130 126| new-instance v1, java.lang.Long 131 128| const-wide v2:v3, #+43 (0x000000000000002b | 2.12448e-322) 132 133| invoke-direct {v1,v2,v3}, java.lang.Long.<init>(long):void 133 136| invoke-polymorphic {v0,v1,v1}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Long, java.lang.Long):int 134 140| move-result v3 135 141| sget-object v4, java.lang.System.out 136 143| invoke-virtual {v4,v3}, java.io.PrintStream.println(int):void 137 146| const-wide v2:v3, #+44 (0x000000000000002c | 2.17389e-322) 138 151| invoke-polymorphic {v0,v1,v2,v3}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Long, long):int 139 155| move-result v3 140 156| sget-object v4, java.lang.System.out 141 158| invoke-virtual {v4,v3}, java.io.PrintStream.println(int):void 142 161| invoke-polymorphic/range {v7..v12}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Long, long):int 143 165| invoke-polymorphic/range {v3..v43}, java.lang.invoke.MethodHandle.invoke(java.lang.Object[]):java.lang.Object, (java.lang.Long, long):int 144 169| return-void 145} 146