code: protected List<Component> extractComponents(String path, ComponentParsingStrategy strategy) {
      requireNonNull(path);
      requireNonNull(strategy);
  
      if ("/".equals(path))
        return emptyList();
  
      // Strip off leading /
      path = path.substring(1);
  
      List<String> values = asList(path.split("/"));
      boolean checkForPlaceholder = strategy == ComponentParsingStrategy.FROM_DECLARATION;
  
      return values.stream().map(value -> {
        if (checkForPlaceholder) {
          ComponentType type = ComponentType.LITERAL;
  
          if (checkForPlaceholder && COMPONENT_PLACEHOLDER_PATTERN.matcher(value).matches()) {
            type = ComponentType.PLACEHOLDER;
            value = value.substring(1, value.length() - 1);
          }
  
          return new Component(value, type);
        } else {
          return new Component(value, ComponentType.LITERAL);
        }
      }).collect(toList());
    }
docs: Assumes {@code path} is already normalized via {@link #normalizePath(String)}.
  
  @param path
  Path from which components are extracted
  @param strategy
  How to perform the extraction (literal or look for placeholders)
  @return Logical components of the supplied {@code path}