code: static ConfigurationPropertyName adapt(CharSequence name, char separator,
  			Function<CharSequence, CharSequence> elementValueProcessor) {
  		Assert.notNull(name, "Name must not be null");
  		if (name.length() == 0) {
  			return EMPTY;
  		}
  		Elements elements = new ElementsParser(name, separator)
  				.parse(elementValueProcessor);
  		if (elements.getSize() == 0) {
  			return EMPTY;
  		}
  		return new ConfigurationPropertyName(elements);
  	}
docs: Create a {@link ConfigurationPropertyName} by adapting the given source. The name
  is split into elements around the given {@code separator}. This method is more
  lenient than {@link #of} in that it allows mixed case names and '{@code _}'
  characters. Other invalid characters are stripped out during parsing.
  <p>
  The {@code elementValueProcessor} function may be used if additional processing is
  required on the extracted element values.
  @param name the name to parse
  @param separator the separator used to split the name
  @param elementValueProcessor a function to process element values
  @return a {@link ConfigurationPropertyName}