104 return map; |
104 return map; |
105 } |
105 } |
106 |
106 |
107 @Override |
107 @Override |
108 MethodHandle editMethodHandle(MethodHandle mh) { |
108 MethodHandle editMethodHandle(MethodHandle mh) { |
|
109 return editStaticMethodHandle(mh); |
|
110 } |
|
111 |
|
112 static MethodHandle editStaticMethodHandle(MethodHandle mh) { |
109 return dropReceiver(mh, Object.class); |
113 return dropReceiver(mh, Object.class); |
110 } |
114 } |
111 |
115 |
112 static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) { |
116 static MethodHandle editConstructorMethodHandle(MethodHandle cmh) { |
|
117 return dropReceiver(cmh, StaticClass.class); |
|
118 } |
|
119 |
|
120 private static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) { |
113 MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass); |
121 MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass); |
114 // NOTE: this is a workaround for the fact that dropArguments doesn't preserve vararg collector state. |
122 // NOTE: this is a workaround for the fact that dropArguments doesn't preserve vararg collector state. |
115 if(mh.isVarargsCollector() && !newHandle.isVarargsCollector()) { |
123 if(mh.isVarargsCollector() && !newHandle.isVarargsCollector()) { |
116 final MethodType type = mh.type(); |
124 final MethodType type = mh.type(); |
117 newHandle = newHandle.asVarargsCollector(type.parameterType(type.parameterCount() - 1)); |
125 newHandle = newHandle.asVarargsCollector(type.parameterType(type.parameterCount() - 1)); |