@SuppressWarnings("unchecked")
    private void loadField(Object object, Class<?> clazz, Field field, Setting setting,
            ConfigurationNode node) throws ConfigurationException,
            IllegalArgumentException, IllegalAccessException, InstantiationException {

        String path = getSettingPath(field, setting);

        Object value = node.get(path);
        CollectionOf collectionOf;
        KeyValueOf keyValueOf;
        Of of;

        // Check if the setting is required
        if (setting.required() && value == null) {
            throw new ConfigurationException("Required field '" + path
                    + "' not defined");
        }

        if (handleLoad(field, object, setting, value) == true) {
            return;
        // collectionOf()
        /*} else if ((collectionOf = field.getAnnotation(CollectionOf.class)) != null) {
            Collection<Object> collectionValue = collectionOf.type().newInstance();
            Iterator<Object> it = value != null ? ((Collection<Object>) value).iterator() : emptyList;
            Object agent = newInstance(collectionOf.value());
            value = collectionOf(node, path, agent, collectionValue, it);
        // keyValueOf()
        } else if ((keyValueOf = field.getAnnotation(KeyValueOf.class)) != null) {
            Map<Object, Object> mapValue = keyValueOf.type().newInstance();
            Iterator<Map.Entry<Object, Object>> it = value != null ? ((Map<Object, Object>) value).entrySet().iterator() : emptyMap;
            value = keyValueOf(node, path, newInstance(keyValueOf.value()), mapValue, it);*/
        // getOf()
        } else if ((of = field.getAnnotation(Of.class)) != null) {
            value = getOf(node, path, of.value());
        }

        if (value != null) {
            field.set(object, value);
        }
    }