private static void assertType(MethodHandle mh, MethodType type) { if(!mh.type().equals(type)) { throw new WrongMethodTypeException("Expected type: " + type + " actual type: " + mh.type()); } } }
private static MethodHandle invalidCallArgumentsHandle(String name, MethodType type, WrongMethodTypeException e) { // Add native call name? MethodHandle mh = MethodHandles.insertArguments(invalidNativeCallArgumentsMH, 0, e.getMessage()); return MethodHandles.dropArguments(mh, 1, type.dropParameterTypes(0, 1).parameterArray()); }
private static void assertType(final MethodHandle mh, final MethodType type) { if(!mh.type().equals(type)) { throw new WrongMethodTypeException("Expected type: " + type + " actual type: " + mh.type()); } } }
private static MethodHandle forSpreadCall(MethodHandle mh, MethodType type) { int expectedParameters = mh.type().parameterCount(); int actualParameters = type.parameterCount(); if (!mh.isVarargsCollector() || !mh.type().parameterType(expectedParameters - 1).equals(Object[].class)) { throw new WrongMethodTypeException("Not Object[] var-args collector"); } if (expectedParameters > actualParameters) { throw new WrongMethodTypeException("Too few arguments"); } if (expectedParameters < actualParameters) { int fixedCount = actualParameters - expectedParameters; int firstFixed = expectedParameters - 1; List<Class<?>> fixed = type.parameterList().subList(firstFixed, firstFixed + fixedCount); mh = MethodHandles.collectArguments(mh, firstFixed, combineArraysMH); mh = MethodHandles.collectArguments(mh, firstFixed, toObjectArray(fixed)); } return mh.asType(type); }
final int l = toType.parameterCount(); if(l != fromType.parameterCount()) { throw new WrongMethodTypeException("Parameter counts differ: " + handle.type() + " vs. " + fromType);
final int l = toType.parameterCount(); if(l != fromType.parameterCount()) { throw new WrongMethodTypeException("Parameter counts differ: " + handle.type() + " vs. " + fromType);