}
private static Object invokeDynamically(RelinkableCallSite callSite,
Object[] args) throws Throwable {
final Class<?> receiverClass = args[0].getClass();
final CallSiteDescriptor descriptor = callSite.getCallSiteDescriptor();
final Class<?>[] signature =
descriptor.getMethodType().parameterArray();
final Class<?>[] reflectSignature = new Class<?>[signature.length - 1];
System.arraycopy(signature, 1, reflectSignature, 0,
reflectSignature.length);
final Method m =
receiverClass.getMethod(descriptor.getNameToken(0), reflectSignature);
final MethodHandle unreflected = MethodHandles.lookup().unreflect(m);
return unreflected.invokeWithArguments(args);
}