private void callAllAnnotatedSetters(HashMap<String, String> headerToFieldMap, T instance) {
        for (Class<?> iteratedClass = clazz; iteratedClass != Object.class; iteratedClass = iteratedClass
                .getSuperclass()) {
            List<Method> allMethods = Arrays.asList(iteratedClass.getDeclaredMethods());
            for (Method method : allMethods) {
                if (method.isAnnotationPresent(CSVMapperSetterMethod.class)) {

                    CSVMapperSetterMethod annotation = method.getAnnotation(CSVMapperSetterMethod.class);
                    if (headerToFieldMap.keySet().contains(annotation.fieldName())) {
                        Class<?>[] parameterTypes = method.getParameterTypes();
                        if (parameterTypes.length == 1) {

                            Class<?> parameterType = parameterTypes[0];
                            callSetter(headerToFieldMap, instance, method, annotation, parameterType);
                        } else {
                            throw new RuntimeException(
                                    "The annotation @CSVMapperSetterMethod can only be applied to methods with " +
                                            "exactly one argument");
                        }
                    }
                }
            }
        }
    }