code: private <T extends Property> Map<String, String> getOverriddenImplementationConfiguration(
              Collection<T> overridableProperties) {
  
          Map<String, String> ret = new HashMap<>();
  
          overridableProperties.forEach(p -> {
              String val = getProperty(p, null);
              if (val != null) {
                  ret.put(p.getPropertyName(), val);
              }
          });
  
          implementationConfiguration.forEach(ret::putIfAbsent);
  
          return ret;
      }
docs: this hoop is needed so that we can type-check the "T" through the stream manipulations