code: public static Map<String, Object> configureProperties(final PropertyResolver resolver,
              final Description description,
              final Object object, PropertyScope defaultScope) {
          Map<String, Object> inputConfig = mapDescribedProperties(resolver, description, defaultScope);
          if (object instanceof Configurable) {
              Configurable configObject = (Configurable) object;
              Properties configuration = new Properties();
              configuration.putAll(inputConfig);
              try {
                  configObject.configure(configuration);
              } catch (ConfigurationException e) {
  
              }
          } else {
              inputConfig = configureObjectFieldsWithProperties(object, description.getProperties(), inputConfig);
          }
          return inputConfig;
      }
docs: Set field values on a plugin object by using a Description, and setting field values to resolved property values.
  Any resolved properties that are not mapped to a field will  be included in the return result.
  
  @param resolver the property resolver
  @param description the property descriptions
  @param object the target object, which can implement {@link Configurable}, otherwise introspection will be used
  @param defaultScope a default property scope to assume for unspecified properties
  
  @return Map of resolved properties that were not configured in the object's fields