public static Method[] getterMethodDrilldown(Class<?> type, String property)
            throws NoSuchMethodException {
        Class<?> innerClass = type;
        Method method;
        if (property.startsWith("./")) {
            property = property.substring(2);
        }
        String[] path = property.split("[./]");
        Method[] methods = new Method[path.length];
        for (int p = 0; p < path.length; p++) {
            if (path[p].indexOf('[') >= 0) {
                method = innerClass.getMethod(
                        getter(path[p].substring(0, path[p].indexOf('['))), (Class<?>[]) null);
            } else {
                try {
                    method = innerClass.getMethod(getter(path[p]), (Class<?>[]) null);
                } catch (NoSuchMethodException ex) {
                    method = innerClass.getMethod("is" + StringTool.capitalize(path[p]),
                            (Class<?>[]) null);
                }
            }
            methods[p] = method;
            innerClass = method.getReturnType();
        }
        return methods;
    }