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 -------- -------- -------- --------