private void registerConverterMethod(Lookup lookup, Method method, Class<?> rtype, Class<?> ptype) {
        try {
            if (IndyObject.class.isAssignableFrom(rtype)) {
                // Java object to IndyObject
                MethodHandle mh = lookup.unreflect(method);
                putRvConv(ptype, mh);
                Class<?> aptype = Array.newInstance(ptype, 0).getClass();
                MethodHandle amh = MethodHandles.insertArguments(getArraytoIndyObject(), 0, mh)
                    .asType(MethodType.methodType(IndyObject.class, aptype));
                putRvConv(aptype, amh);
                log.debug("  J->I: {}", signature(method));
            } else if (IndyObject.class.isAssignableFrom(ptype)) {
                // IndyObject to Java object
                MethodHandle mh = lookup.unreflect(method);
                putPvConv(rtype, mh);
                Class<?> artype = Array.newInstance(rtype, 0).getClass();
                MethodHandle amh = MethodHandles.insertArguments(getIndyObjectsToArray(), 0, mh, rtype)
                    .asType(MethodType.methodType(artype, IndyObject[].class))
                    .asVarargsCollector(IndyObject[].class);
                putPvConv(artype, amh);
                log.debug("  I->J: {}", signature(method));
            } else {
                log.debug("  Skip: {}", signature(method));
            }
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }