docs: @Override
      @JsonIgnore
      public Map<String, OptionalConfigurationComponent<?>> getValidationMap() {
          // Use getDeclaredFields as the fields will probably be private
          final Field[] fields = getClass().getDeclaredFields();
          final Map<String, OptionalConfigurationComponent<?>> result = new HashMap<>();
  
          for (final Field field : fields) {
              final boolean oldValue = field.isAccessible();
  
              try {
                  field.setAccessible(true);
                  final Object o = field.get(this);
  
                  // if o is null this is false
                  if (o instanceof OptionalConfigurationComponent) {
                      final JsonProperty ann = field.getAnnotation(JsonProperty.class);
                      final String key;
  
                      if (ann != null) {
                          key = ann.value();
                      }
                      else {
                          key = field.getName();
                      }
  
                      result.put(key, (OptionalConfigurationComponent<?>) o);
                  }
              } catch (final IllegalAccessException e) {
                  throw new AssertionError("Your JVM does not allow you to run this code.", e);
              } finally {
                  //noinspection ThrowFromFinallyBlock
                  field.setAccessible(oldValue);
              }
          }
  
          return result;
      }