1 Standalone NetBeans project of JSR 292 RI 2 3 (Not yet merged with the JDK; use -Xbootclasspath.) 4 5 To open: 6 open -a netbeans . # Open Project => select this directory 7 8 To build: 9 cd .; ant clean compile run 10 11 To run a unit test (requires modified JVM): 12 #NetBeansResources=$(find /Applications/NetBeans* -type d -name Resources | tail -1) 13 #NetBeansResources="/Applications/NetBeans/NetBeans 6.1.app/Contents/Resources" 14 #junit="$NetBeansResources/NetBeans/java2/modules/ext/junit-3.8.2.jar" 15 export junit=$HOME/env/jars/junit-4.1.jar #(or wherever you have it stashed) 16 export mhproj="$HOME/Projects/MethodHandle" #(pwd -P) 17 export acproj="$HOME/Projects/AnonymousClass" #(cd ../AnonymousClass; pwd -P) 18 export cpath="$acproj/dist/AnonymousClass.jar:$mhproj/build/classes:$mhproj/build/test/classes:$junit" 19 gamma -XX:+MethodHandleSupport -Xbootclasspath/p:"$cpath" jdk.java.dyn.MethodHandleBytecodeTest 20 21 Simpler (currently broken) demo: 22 gamma -XX:+MethodHandleSupport -Xbootclasspath/p:"$cpath" -cp "$mhproj"/dist/MethodHandle.jar jdk.java.dyn.MethodHandleDemo 23 24 Using JUnit 4: 25 gamma -XX:+MethodHandleSupport -Xbootclasspath/p:"$cpath" org.junit.runner.JUnitCore jdk.java.dyn.MethodHandlesTest 26 27 Current output: 28 29 -------- -------- -------- -------- 30 VM option '+MethodHandleSupport' 31 JUnit version 4.1 32 .findStatic 33 findStatic class jdk.java.dyn.MethodHandlesTest$Example.s0/()void => jdk.java.dyn.MethodHandlesTest$Example.s0()void 34 calling [s0, []] on jdk.java.dyn.MethodHandlesTest$Example.s0()void 35 new invoker: impl.java.dyn.util.MethodHandleInvoker$L0/11502424@d80be3 36 :findStatic class jdk.java.dyn.MethodHandlesTest$Example.pkg_s0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_s0()void 37 calling [pkg_s0, []] on jdk.java.dyn.MethodHandlesTest$Example.pkg_s0()void 38 :findStatic class jdk.java.dyn.MethodHandlesTest$Example.pri_s0/()void => jdk.java.dyn.MethodHandlesTest$Example.pri_s0()void 39 calling [pri_s0, []] on jdk.java.dyn.MethodHandlesTest$Example.pri_s0()void 40 :findStatic class jdk.java.dyn.MethodHandlesTest$Example.s1/(java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.s1(java.lang.Object)java.lang.Object 41 calling [s1, [#1000000]] on jdk.java.dyn.MethodHandlesTest$Example.s1(java.lang.Object)java.lang.Object 42 new invoker: impl.java.dyn.util.MethodHandleInvoker$L1/26083064@15e83f9 43 :findStatic class jdk.java.dyn.MethodHandlesTest$Example.s2/(int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.s2(int)java.lang.Object 44 calling [s2, [1000001]] on jdk.java.dyn.MethodHandlesTest$Example.s2(int)java.lang.Object 45 new invoker: impl.java.dyn.util.MethodHandleInvoker$L1/31149935@13c1b02 46 :findStatic class jdk.java.dyn.MethodHandlesTest$Example.bogus/()void => null !! java.dyn.NoAccessException: cannot access: jdk.java.dyn.MethodHandlesTest$Example.bogus()void, from jdk.java.dyn.MethodHandlesTest$Example 47 .findVirtual 48 findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v0/()void => jdk.java.dyn.MethodHandlesTest$Example.v0()void 49 calling [v0, [Example#1000002]] on jdk.java.dyn.MethodHandlesTest$Example.v0()void 50 new invoker: impl.java.dyn.util.MethodHandleInvoker$L1/14867177@19209ea 51 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.pkg_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 52 calling [pkg_v0, [Example#1000003]] on jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 53 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.pri_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void 54 calling [pri_v0, [Example#1000004]] on jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void 55 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v1/(java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object 56 calling [v1, [Example#1000005, #1000006]] on jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object 57 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/18820833@3ecfff 58 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v2/(java.lang.Object,java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object 59 calling [v2, [Example#1000007, #1000008, #1000009]] on jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object 60 new invoker: impl.java.dyn.util.MethodHandleInvoker$L3/10883428@bfc8e0 61 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v2/(java.lang.Object,int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object 62 calling [v2, [Example#1000010, #1000011, 1000012]] on jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object 63 new invoker: impl.java.dyn.util.MethodHandleInvoker$L3/597230@4a63d8 64 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v2/(int,java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object 65 calling [v2, [Example#1000013, 1000014, #1000015]] on jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object 66 new invoker: impl.java.dyn.util.MethodHandleInvoker$L3/22201561@f99ff5 67 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.v2/(int,int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object 68 calling [v2, [Example#1000016, 1000017, 1000018]] on jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object 69 new invoker: impl.java.dyn.util.MethodHandleInvoker$L3/13783459@1edc073 70 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.bogus/()void => null !! java.dyn.NoAccessException: cannot access: jdk.java.dyn.MethodHandlesTest$Example.bogus()void, from jdk.java.dyn.MethodHandlesTest 71 findVirtual class jdk.java.dyn.MethodHandlesTest$SubExample.Sub/v0/()void => jdk.java.dyn.MethodHandlesTest$SubExample.v0()void 72 calling [Sub/v0, [SubExample#1000019]] on jdk.java.dyn.MethodHandlesTest$SubExample.v0()void 73 new invoker: impl.java.dyn.util.MethodHandleInvoker$L1/9502784@1a786c3 74 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.Sub/v0/()void => jdk.java.dyn.MethodHandlesTest$Example.v0()void 75 calling [Sub/v0, [SubExample#1000021]] on jdk.java.dyn.MethodHandlesTest$Example.v0()void 76 :findVirtual interface jdk.java.dyn.MethodHandlesTest$IntExample.Sub/v0/()void => jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 77 calling [Sub/v0, [SubExample#1000023]] on jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 78 new invoker: impl.java.dyn.util.MethodHandleInvoker$L1/20111677@1617189 79 :findVirtual class jdk.java.dyn.MethodHandlesTest$SubExample.Sub/pkg_v0/()void => jdk.java.dyn.MethodHandlesTest$SubExample.pkg_v0()void 80 calling [Sub/pkg_v0, [SubExample#1000024]] on jdk.java.dyn.MethodHandlesTest$SubExample.pkg_v0()void 81 :findVirtual class jdk.java.dyn.MethodHandlesTest$Example.Sub/pkg_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 82 calling [Sub/pkg_v0, [SubExample#1000026]] on jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 83 :findVirtual interface jdk.java.dyn.MethodHandlesTest$IntExample.v0/()void => jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 84 calling [v0, [Example#1000028]] on jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 85 :findVirtual interface jdk.java.dyn.MethodHandlesTest$IntExample.Int/v0/()void => jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 86 calling [Int/v0, [jdk.java.dyn.MethodHandlesTest$IntExample$Impl@2bb514]] on jdk.java.dyn.MethodHandlesTest$IntExample.v0()void 87 :.findSpecial 88 findSpecial class jdk.java.dyn.MethodHandlesTest$Example.v0/()void => jdk.java.dyn.MethodHandlesTest$Example.v0()void 89 calling [v0, [Example#1000031]] on jdk.java.dyn.MethodHandlesTest$Example.v0()void 90 :findSpecial class jdk.java.dyn.MethodHandlesTest$Example.pkg_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 91 calling [pkg_v0, [Example#1000032]] on jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 92 :findSpecial class jdk.java.dyn.MethodHandlesTest$SubExample.<init>/(int)void => jdk.java.dyn.MethodHandlesTest$SubExample.<init>(int)void 93 calling [<init>, [SubExample#1000033, 1000034]] on jdk.java.dyn.MethodHandlesTest$SubExample.<init>(int)void 94 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/26335425@2d9c06 95 :findSpecial class jdk.java.dyn.MethodHandlesTest$Example.<init>/(int)void => null !! java.dyn.NoAccessException: constructor must be local to caller: jdk.java.dyn.MethodHandlesTest$Example.<init>(int)void, from jdk.java.dyn.MethodHandlesTest$SubExample 96 findSpecial class jdk.java.dyn.MethodHandlesTest$Example.bogus/()void => null !! java.dyn.NoAccessException: cannot access: jdk.java.dyn.MethodHandlesTest$Example.bogus()void, from jdk.java.dyn.MethodHandlesTest$SubExample 97 .bind 98 init BMH type=()void argnum=0 vmargslot=0 99 bind Example#1000036.v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$Example.v0()void] 100 calling [v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v0()void] 101 :init BMH type=()void argnum=0 vmargslot=0 102 bind Example#1000037.pkg_v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void] 103 calling [pkg_v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void] 104 :init BMH type=()void argnum=0 vmargslot=0 105 bind Example#1000038.pri_v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void] 106 calling [pri_v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void] 107 :init BMH type=(java.lang.Object)java.lang.Object argnum=0 vmargslot=1 108 bind Example#1000039.v1/(java.lang.Object)java.lang.Object => Bound[jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object] 109 calling [v1, [#1000040]] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object] 110 :init BMH type=(java.lang.Object,java.lang.Object)java.lang.Object argnum=0 vmargslot=2 111 bind Example#1000041.v2/(java.lang.Object,java.lang.Object)java.lang.Object => Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object] 112 calling [v2, [#1000042, #1000043]] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object] 113 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/32392776@482923 114 :init BMH type=(java.lang.Object,int)java.lang.Object argnum=0 vmargslot=2 115 bind Example#1000044.v2/(java.lang.Object,int)java.lang.Object => Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object] 116 calling [v2, [#1000045, 1000046]] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object] 117 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/10053659@181edf4 118 :init BMH type=(int,java.lang.Object)java.lang.Object argnum=0 vmargslot=2 119 bind Example#1000047.v2/(int,java.lang.Object)java.lang.Object => Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object] 120 calling [v2, [1000048, #1000049]] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object] 121 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/1760304@16df84b 122 :init BMH type=(int,int)java.lang.Object argnum=0 vmargslot=2 123 bind Example#1000050.v2/(int,int)java.lang.Object => Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object] 124 calling [v2, [1000051, 1000052]] on Bound[jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object] 125 new invoker: impl.java.dyn.util.MethodHandleInvoker$L2/27940859@763f5d 126 :bind Example#1000053.bogus/()void => null !! java.dyn.NoAccessException: cannot access: jdk.java.dyn.MethodHandlesTest$Example.bogus()void, from jdk.java.dyn.MethodHandlesTest 127 init BMH type=()void argnum=0 vmargslot=0 128 bind SubExample#1000054.Sub/v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$SubExample.v0()void] 129 calling [Sub/v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$SubExample.v0()void] 130 :init BMH type=()void argnum=0 vmargslot=0 131 bind SubExample#1000055.Sub/pkg_v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$SubExample.pkg_v0()void] 132 calling [Sub/pkg_v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$SubExample.pkg_v0()void] 133 :init BMH type=()void argnum=0 vmargslot=0 134 bind jdk.java.dyn.MethodHandlesTest$IntExample$Impl@13a317a.Int/v0/()void => Bound[jdk.java.dyn.MethodHandlesTest$IntExample$Impl.v0()void] 135 calling [Int/v0, []] on Bound[jdk.java.dyn.MethodHandlesTest$IntExample$Impl.v0()void] 136 :.unreflect 137 unreflect class jdk.java.dyn.MethodHandlesTest$Example.s0/()void => jdk.java.dyn.MethodHandlesTest$Example.s0()void 138 calling [s0, []] on jdk.java.dyn.MethodHandlesTest$Example.s0()void 139 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.pkg_s0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_s0()void 140 calling [pkg_s0, []] on jdk.java.dyn.MethodHandlesTest$Example.pkg_s0()void 141 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.pri_s0/()void => jdk.java.dyn.MethodHandlesTest$Example.pri_s0()void 142 calling [pri_s0, []] on jdk.java.dyn.MethodHandlesTest$Example.pri_s0()void 143 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.s1/(java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.s1(java.lang.Object)java.lang.Object 144 calling [s1, [#1000057]] on jdk.java.dyn.MethodHandlesTest$Example.s1(java.lang.Object)java.lang.Object 145 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.s2/(int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.s2(int)java.lang.Object 146 calling [s2, [1000058]] on jdk.java.dyn.MethodHandlesTest$Example.s2(int)java.lang.Object 147 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v0/()void => jdk.java.dyn.MethodHandlesTest$Example.v0()void 148 calling [v0, [Example#1000059]] on jdk.java.dyn.MethodHandlesTest$Example.v0()void 149 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.pkg_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 150 calling [pkg_v0, [Example#1000060]] on jdk.java.dyn.MethodHandlesTest$Example.pkg_v0()void 151 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.pri_v0/()void => jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void 152 calling [pri_v0, [Example#1000061]] on jdk.java.dyn.MethodHandlesTest$Example.pri_v0()void 153 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v1/(java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object 154 calling [v1, [Example#1000062, #1000063]] on jdk.java.dyn.MethodHandlesTest$Example.v1(java.lang.Object)java.lang.Object 155 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v2/(java.lang.Object,java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object 156 calling [v2, [Example#1000064, #1000065, #1000066]] on jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,java.lang.Object)java.lang.Object 157 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v2/(java.lang.Object,int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object 158 calling [v2, [Example#1000067, #1000068, 1000069]] on jdk.java.dyn.MethodHandlesTest$Example.v2(java.lang.Object,int)java.lang.Object 159 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v2/(int,java.lang.Object)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object 160 calling [v2, [Example#1000070, 1000071, #1000072]] on jdk.java.dyn.MethodHandlesTest$Example.v2(int,java.lang.Object)java.lang.Object 161 :unreflect class jdk.java.dyn.MethodHandlesTest$Example.v2/(int,int)java.lang.Object => jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object 162 calling [v2, [Example#1000073, 1000074, 1000075]] on jdk.java.dyn.MethodHandlesTest$Example.v2(int,int)java.lang.Object 163 :IIIII.convertArguments/pairwise 164 convert jdk.java.dyn.MethodHandlesTest$Callee.id(java.lang.Object)java.lang.Object to (java.lang.String)java.lang.Object => null !! java.lang.UnsupportedOperationException: Not yet implemented 165 EIIIIIIII 166 Time: 2.544 167 There was 1 failure: 168 1) testConvertArguments_pairwise(jdk.java.dyn.MethodHandlesTest) 169 java.lang.UnsupportedOperationException: Not yet implemented 170 at impl.java.dyn.MethodHandleImpl.convertArguments(MethodHandleImpl.java:185) 171 at java.dyn.MethodHandles.convertArguments(MethodHandles.java:565) 172 at jdk.java.dyn.MethodHandlesTest.testConvert(MethodHandlesTest.java:521) 173 at jdk.java.dyn.MethodHandlesTest.testConvert(MethodHandlesTest.java:508) 174 at jdk.java.dyn.MethodHandlesTest.testConvertArguments_pairwise(MethodHandlesTest.java:501) 175 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 176 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 177 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 178 at java.lang.reflect.Method.invoke(Method.java:597) 179 at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99) 180 at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81) 181 at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) 182 at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) 183 at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) 184 at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71) 185 at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) 186 at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) 187 at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) 188 at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) 189 at org.junit.internal.runners.CompositeRunner.run(CompositeRunner.java:29) 190 at org.junit.runner.JUnitCore.run(JUnitCore.java:121) 191 at org.junit.runner.JUnitCore.run(JUnitCore.java:100) 192 at org.junit.runner.JUnitCore.run(JUnitCore.java:91) 193 at org.junit.runner.JUnitCore.runMain(JUnitCore.java:75) 194 at org.junit.runner.JUnitCore.main(JUnitCore.java:42) 195 196 FAILURES!!! 197 Tests run: 6, Failures: 1 198 199 200 -------- -------- -------- --------