< prev index next >

src/java.base/share/classes/java/lang/invoke/MethodHandles.java

Print this page

        

*** 3764,3773 **** --- 3764,3774 ---- * <p> * The pre-processing is performed by one or more method handles, * specified in the elements of the {@code filters} array. * The first element of the filter array corresponds to the {@code pos} * argument of the target, and so on in sequence. + * The filter functions are invoked in left to right order. * <p> * Null arguments in the array are treated as identity functions, * and the corresponding arguments left unchanged. * (If there are no non-null elements in the array, the original target is returned.) * Each filter is applied to the corresponding argument of the adapter.
*** 3834,3848 **** */ public static MethodHandle filterArguments(MethodHandle target, int pos, MethodHandle... filters) { filterArgumentsCheckArity(target, pos, filters); MethodHandle adapter = target; ! int curPos = pos-1; // pre-incremented ! for (MethodHandle filter : filters) { ! curPos += 1; if (filter == null) continue; // ignore null elements of filters ! adapter = filterArgument(adapter, curPos, filter); } return adapter; } /*non-public*/ static --- 3835,3850 ---- */ public static MethodHandle filterArguments(MethodHandle target, int pos, MethodHandle... filters) { filterArgumentsCheckArity(target, pos, filters); MethodHandle adapter = target; ! // process filters in reverse order so that the invocation of ! // the resulting adapter will invoke the filters in left-to-right order ! for (int i = filters.length - 1; i >= 0; --i) { ! MethodHandle filter = filters[i]; if (filter == null) continue; // ignore null elements of filters ! adapter = filterArgument(adapter, pos + i, filter); } return adapter; } /*non-public*/ static
< prev index next >