private void injectMembers(Class<? extends Object> clazz, final Object instance) throws SecurityException, InstantiationException, IllegalAccessException {
        Field[] fields = clazz.getDeclaredFields();
        for (final Field field : fields) {
            if (field.isAnnotationPresent(Selectable.class)) {
                Object value = newElement(field, instance);
                if (value != null) {
                    injectIntoField(instance, field, value);
                }
            }
        }

        Class<? extends Object> superclass = clazz.getSuperclass();
        if (superclass != null) {
            injectMembers(superclass, instance);
        }
    }