import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
-import java.lang.reflect.Constructor;
import javax.xml.transform.dom.DOMSource;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType.Builder;
}
}
- private static final MethodType CONSTRUCTOR_TYPE = MethodType.methodType(OpaqueObject.class,
- OpaqueData.class);
+ private static final MethodType CTOR_LOOKUP_TYPE = MethodType.methodType(void.class, OpaqueData.class);
+ private static final MethodType CTOR_INVOKE_TYPE = MethodType.methodType(OpaqueObject.class, OpaqueData.class);
@SuppressWarnings("rawtypes")
private static final Builder<CodecOpaqueObject> TEMPLATE = new ByteBuddy().subclass(CodecOpaqueObject.class)
.modifiers(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SYNTHETIC);
.implement(bindingInterface)
.make()));
- Constructor<?> ctor;
try {
- ctor = proxyClass.getDeclaredConstructor(OpaqueData.class);
- } catch (NoSuchMethodException e) {
- throw new LinkageError("Failed to acquire constructor for prototype " + proxyClass, e);
- }
- try {
- return MethodHandles.publicLookup().unreflectConstructor(ctor).asType(CONSTRUCTOR_TYPE);
- } catch (IllegalAccessException e) {
+ return MethodHandles.publicLookup().findConstructor(proxyClass, CTOR_LOOKUP_TYPE).asType(CTOR_INVOKE_TYPE);
+ } catch (IllegalAccessException | NoSuchMethodException e) {
throw new LinkageError("Failed to access constructor for prototype " + proxyClass, e);
}
}